Bug:“watch &”在脚本中不起作用

Bug:“watch &”在脚本中不起作用

当有人向我发送邮件时,我有以下脚本来提醒我:

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 ) &

这样屏幕就不会混乱,您也不需要任何重置。

相关内容