我目前正在使用 wall 在活动开始和完成时在远程计算机上显示消息。但这是侵入性的,因为它将跨他们可能打开的编辑器等进行写入。
我喜欢的是如果用户在终端上按回车键,则“您有未读邮件消息”会显示在下一行。
这是什么?我如何远程与其交互?
答案1
该行是由 shell 打印的。不同的 shell 以稍微不同的方式实现查找邮件,但除非可以指望人们根据您的喜好配置他们的 shell(并且可能选择不同的 shell),否则您需要向他们发送邮件。
除了内置的邮件通知之外,专为交互式使用而设计的优秀 shell 还可以在显示提示之前运行任意命令。您可以为您的用户提供cat
一个文件,或者做一些更复杂的事情。对于 zsh 用户,请将其放入~/.zshrc
:
precmd () {
if [[ /etc/sysadmin-message -nt ~/.sysadmin-message-timestamp ]]; then
cat /etc/sysadmin-message
touch ~/.sysadmin-message-timestamp
fi
}
对于 bash 用户,请将其放入~/.bashrc
:
PROMPT_COMMAND='
if [[ /etc/sysadmin-message -nt ~/.sysadmin-message-timestamp ]]; then
cat /etc/sysadmin-message
touch ~/.sysadmin-message-timestamp
fi
'
答案2
Wall
将跨打开的程序进行写入,但大多数编辑器都有某种“重绘”命令来清理除编辑器之外写入屏幕的任何内容。该文本实际上并没有破坏编辑器的内容。
为了做你想做的事,你必须对precmd()
用户 shell 的功能发挥创意。您必须编写某种通知队列,并将用户 shell 配置设置为在每个命令之前检查该队列。这涉及一些开销,因此要小心如何编写该位。