我想运行命令在终端中显示欢迎消息,但我希望它仅在桌面会话中的第一个终端会话中运行。我知道通过将命令添加到 .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