有什么办法可以在之后立即向用户显示一条消息第一的登录?
我想向他表明“这是您第一次使用此帐户登录”。
答案1
创建帐户时,创建一个名为~/.not_logged_in_yet
.它不必包含任何内容,文件只需要存在即可:
touch ~user/.not_logged_in_yet # create the file
chown user ~user/.not_logged_in_yet # should be owned by the user
chmod u+rw ~user/.not_logged_in_yet # user must be able to delete it
然后,创建一个名为的脚本,/etc/profile.d/check_first_login.sh
其中包含
#!/bin/bash
# only do this for interactive shells
if [ "$-" != "${-#*i}" ]; then
if [ -f "$HOME/.not_logged_in_yet" ]; then
echo "Welcome, this is your first login"
rm "$HOME/.not_logged_in_yet"
fi
fi
当您使用 bash 作为 shell 登录时,shell 将获取源代码/etc/profile
(请参阅Bash 启动文件在手册中)。/etc/profile
源中的所有*.sh
文件/etc/profile.d/
,因此在其中添加文件使其对计算机上的所有用户可见。
您只想在会话处于以下状态时打印该消息交互的。从您的个人资料中打印任何内容都可能会破坏那些应该是非交互式的内容(例如ssh-copy-id
——尽管我不知道这是否会特别破坏)。 bash 变量$-
包含使用以下命令设置的一些设置set
:
$ bash -c 'echo $-; set -ex; echo $-'
hBc
+ echo ehxBc
ehxBc
这种形式的参数扩展${-#*i}
删除了以“i”结尾的前导子字符串。$-
如果是交互式 bash 会话,则仅包含“i”,因此仅当会话是交互式时才"$-"
不等于。"${i#*i}"
还有其他方法可以测试这一点:请参阅这个 shell 是交互式的吗?-- 我使用这个方法是因为 /etc/profile 就是这么做的。