当有人向我发送邮件时,我有以下脚本来提醒我:
cd /var/mail
watch -g ls && cat end
./alert
end
将是一个空白文件;当我回家时,我会end
从另一个 shell 修改该文件,脚本将因-g
切换而结束。
然后我意识到,我可以简单地告诉脚本我回家的时间,而不是打开另一个 shell,然后它会end
在那时自行修改文件。当我执行此操作并将其发送watch
到后台时,脚本将按预期终止。然而,脚本退出后,shell 会开始各种奇怪的行为。最简单的错误示例:
( watch -g cat end ) &
sleep 2
echo y >> end
我想我应该使用不同的应用程序来避免这个错误。然而,在我的系统(Debian)上bash
似乎konsole
都存在这个问题。
我应该补充一点,直接从命令行运行上述代码似乎确实按预期工作。仅当从脚本内运行时才会产生这种奇怪的行为。
答案1
两个进程同时写入屏幕可能会造成混乱。尝试追加
reset
之后echo y
,它应该将终端重置回正常状态。也许在它之前也添加一个短暂的睡眠,这样手表在重置运行后就无法运行。
更新:如果您对 的输出不感兴趣watch
,只需将其 stdout 和 stderr 重定向到任何地方:
( watch -g cat end >& /dev/null ) &
这样屏幕就不会混乱,您也不需要任何重置。