我正在使用 crontab 向所有用户发送消息。
我写
*/1 * * * * wall $(bash some_shell_script.sh)
但问题是我总是必须按Ctrl+D才能结束消息。
我该如何解决这个问题?
答案1
该wall
命令在 的上下文中执行cron
。它做它的事情并退出。
在接收显示设备(终端)上,您将收到来自 的通知wall
。此通知与您在终端上执行的操作无关,因此,如果您在发送通知消息时安静地坐在命令行提示符处,则提示符不会被重写。您发现需要按 Enter 才能重新发送提示,但实际上这是不必要的:您只需正常输入命令即可。
场景时间线
- 您已登录并坐在命令提示符处
- 通知
wall
已发送至您的终端 - 你输入
ls
(并点击进入)
在第 3 步,您没有看到可见的提示,但 shell 仍在耐心等待您的命令。
或者,也许您实际上正在谈论如何退出crontab
命令。在本例中,Ctrl/D 用于表示输入结束。
设想
crontab
- 你输入行
*/1 * * * * bash some_shell_script.sh | wall
- 您按 Ctrl/D 结束
crontab
命令的数据输入
请注意,步骤 3 中的 Ctrl/D 与 无关wall
。此外,此条目将每分钟crontab
重复您的命令。wall
这真的是你想要的吗?
答案2
您可以使用 GNU screen 来隔离后台进程而不退出。
- 为您的发行版安装 GNU Screen
screen -R wall
wall $(bash some_shell_script.sh)
- Ctrl-A、Ctrl-D