Bash

錯誤:watch & 在腳本中不起作用

  • January 22, 2020

當有人向我發送郵件時,我有以下腳本來提醒我:

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)bashkonsole似乎都有這個問題。

我應該補充一點,直接從命令行執行上述程式碼似乎確實可以按預期工作。只有在腳本中執行時才會產生這種奇怪的行為。

同時寫入螢幕的兩個程序可能會搞砸。嘗試追加

reset

之後echo y,它應該將終端重置為正常。也許在它之前也添加一個短暫的睡眠,所以在重置執行後手錶無法執行。

*更新:*如果您對 的輸出不感興趣watch,只需將其 stdout 和 stderr 都重定向到無處:

( watch -g cat end >& /dev/null ) &

然後它不會弄亂螢幕,你也不需要任何重置。

引用自:https://unix.stackexchange.com/questions/563370