大前提
-
>
は 標準出力 (STDOUT) に対して作用するリダイレクト演算子 -
echo
やprint
は、すべて STDOUT に出力される -
fwrite()
は出力先を指定できるので-
fwrite(STDOUT, ...)
とすれば標準出力 -
fwrite(STDERR, ...)
とすれば標準エラー出力
-
で、ポイントはここ。
標準エラー出力にした場合、
>
だけではファイルに出力されない
- これをログに残すには、
2>
または2>&1
のような表記が必要
確かに実際の体験として
Webサーバーで webhook を利用して、
GitHub で push されたら本番端末で git pull
するよう実装し、
そのとき、ログを保存する処理を入れたが、失敗時のエラーが保存されなかった。
原因は、git pull
のエラー出力が STDERR
に出力されていたため、>
ではキャッチされなかったためだった。
まとめ
-
>
は標準出力(STDOUT)にしか動作しない -
print
echo
= STDOUT -
fwrite()
は出力先を指定できる -
fwrite(STDERR, ...)
で出力されたメッセージをログに残すには2>
や2>&1
のような表記が必要