bashでは、リダイレクトを使用するコマンドが失敗すると、それより前に実行されていたプログラムは実行されないことに気づきました。
たとえば、このプログラムはファイル "a"を開き、50バイトをファイル "a"に書き込みます。ただし、権限が不十分なファイル(〜root / log)へのリダイレクトを指定してこのコマンドを実行しても、「a」のファイルサイズは変更されません。
$ ./write_file.py >> ~root/log
-bash: /var/root/log: Permission denied
cdal at Mac in ~/experimental/unix_write
$ ls -lt
total 16
-rw-rw-r-- 1 cdal staff 0 Apr 27 08:54 a <-- SHOULD BE 50 BYTES
プログラムが実行され、すべての出力がキャプチャされ(ファイル "a"にも書き込まれる)、その後、出力が〜root / logに書き込まれなくなると考えられます。代わりに、プログラムは実行されません。
これはなぜですか、またbashはプログラムを実行する前に実行する「チェック」の順序をどのように選択するのですか?他のチェックも実行されますか?
PS私は、「許可が拒否された」ファイルにリダイレクトされたときに、cronで実行されているプログラムが実際に実行されたかどうかを確認しようとしています。
write_file.py
プログラムを実行して、その出力を~root/log
bashに送信します:「申し訳ありませんが、そのファイルへの書き込みは許可されていません!」シェルは、本来あるべきことを実行しています。すると、すぐに問題の理由が通知され、対処方法を決定する機会が与えられます。すべてのbashメンテナーが知っているように、そのコマンドを実行して出力を保存しないと、非常に悪いことが発生する可能性があります。保存する場所を指定することが十分に重要である場合、ASS | U | MEは、stdoutを保存せずに実行しても問題ありません
stdout
それを正確に行うようにリダイレクトしました。したがって、プログラムが実行されても、出力は表示されません。