誰かが私に電子メールを送信したときに知らせる次のスクリプトがあります。
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
端末を再び正常にリセットする必要があります。リセット後に時計が起動しないようにする前に、短いスリープモードを追加することもできます。
修正する:出力に興味がない場合は、watch
stdoutとstderrをどこにでもリダイレクトしてください。
( watch -g cat end >& /dev/null ) &
これにより、画面が乱れなくなり、リセットが不要になります。