バグ: "watch &"はスクリプトで機能しません。

バグ:

誰かが私に電子メールを送信したときに知らせる次のスクリプトがあります。

cd /var/mail
watch -g ls && cat end
./alert

end空のファイルになります。家に着いたら、end別のシェルでファイルを変更し、スクリプトは-gスイッチで終了します。

その後、他のシェルを開くのではなく、家に帰る時間をスクリプトに伝えることで、スクリプトがendその時間に自分でファイルを変更できることに気づきました。これを行い、watchバックグラウンドで送信すると、スクリプトは期待どおりに終了します。しかし、スクリプトが終了した後、シェルは奇妙に動作し始めます。最も簡単なエラーの例:

( watch -g cat end ) &
sleep 2
echo y >> end

このエラーを回避するには、他のアプリケーションを使用する必要があるようです。しかし、この問題は私のすべてのシステム(Debian)に存在するbashようです。konsole

上記のコードをコマンドラインから直接実行すると、期待どおりに機能しているようです。この奇妙な動作は、スクリプト内で実行した場合にのみ発生します。

ベストアンサー1

同時に、2つのプロセスが画面に書き込まれると、混乱が発生する可能性があります。追加してみてください

reset

その後、echo y端末を再び正常にリセットする必要があります。リセット後に時計が起動しないようにする前に、短いスリープモードを追加することもできます。

修正する:出力に興味がない場合は、watchstdoutとstderrをどこにでもリダイレクトしてください。

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

これにより、画面が乱れなくなり、リセットが不要になります。

おすすめ記事