仅在第一个会话中运行终端命令

仅在第一个会话中运行终端命令

我想运行命令在终端中显示欢迎消息,但我希望它仅在桌面会话中的第一个终端会话中运行。我知道通过将命令添加到 .bashrc 来运行命令,但这些命令会在每个终端会话中运行,并且我试图将我的命令仅限于第一个。有谁知道如何做到这一点?谢谢。

我正在使用 Ubuntu 21.10 beta,如果这有什么区别的话。

答案1

首先......在桌面会话中

因此,您需要与桌面会话进行交互!

想法:您检查会话下的服务。如果不存在,请打印欢迎消息,然后启动服务。

因此,编写一个用户服务,例如welcome-msg.service,(如https://wiki.archlinux.org/title/systemd/User#Writing_user_units):

〜/.config/systemd/user/welcome-msg.service :

[Unit]
Description=Welcome Message one-shot service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/true

然后,在你的~/.bashrc

# Check whether the service has been started
if !  systemctl --user is-active --quiet welcome-msg; then
  echo "Welcome!"
  systemctl start welcome-msg
fi

答案2

仅使用 bash 的更简单版本:

# Define the path to the file that will store the last login date
LAST_LOGIN_FILE="$HOME/.last_login"

# Get the current date
CURRENT_DATE=$(date "+%Y-%m-%d")

# Read the last login date from the file
LAST_LOGIN=$(cat "$LAST_LOGIN_FILE" 2>/dev/null)

# Check if the current date is different from the last login date
if [[ "$CURRENT_DATE" != "$LAST_LOGIN" ]]; then
    echo "Welcome ${USER}! Today is $(date)."
    echo "$CURRENT_DATE" > "$LAST_LOGIN_FILE"
fi

相关内容