解説
エラーの文字はどこへ出る?標準出力と標準エラーを別ファイルで見よう
コマンドの表示をファイルへ保存したのに、エラーらしい文字だけ画面に残った。プログラムの文字の出口には、標準出力と標準エラーという別の流れがあるよ。

コマンドの表示をファイルへ保存したのに、エラーらしい文字だけ画面に残った。プログラムの文字の出口には、標準出力と標準エラーという別の流れがあるよ。
この記事ではBashで二つを分けて保存する。練習用の新しいフォルダーだけを使い、実際のログや秘密情報を扱わない。ファイルへの「>」は同名の内容を上書きするので、既存ファイルがない場所で試そう。
内容と状態を分けて考える
標準出力は通常の結果、標準エラーは診断などのメッセージに使われることが多い。ただし、どちらへ何を出すかはプログラムの実装によるよ。
標準エラーへ文字が出たことと、終了コードが失敗を示すことも同じではない。文字の流れと処理の成功・失敗は、別に確認する。
練習用の二つの表示
mkdir output-practice
cd output-practice
bash -c 'printf "result\n"; printf "notice\n" >&2' >out.log 2>err.log
cat out.log
cat err.log
out.logにはresult、err.logにはnoticeが入る。ここで使う子Bashは、通常のprintfの結果と、>&2で標準エラーへ向けたprintfの結果を出すだけ。実際の障害を起こしているわけではないよ。
| 指定 | この例の行き先 |
|---|---|
| >out.log | 標準出力をout.logへ |
| 2>err.log | 標準エラーをerr.logへ |
| >&2 | その表示を標準エラーへ |
数字の2は標準エラーの番号。この練習では、二つのファイルへ想定どおり分かれることを実行して確認した。
保存したから、すべての情報があるとは限らない
標準出力だけを保存すると、診断が別の場所に出ている場合がある。逆に、別の専用ログへ記録するアプリもあるので、出力先の仕様を確認しよう。
表示された文字にAPIキーや個人情報が含まれる場合、そのまま共有しない。必要な部分を確認し、秘密値を取り除いてから問い合わせに使う。
上書きと追記を間違えない
「>>」は追記に使うけれど、追記にすれば何でも安全という意味ではない。古い結果が混ざると今回の状態を読み違えることもある。目的に合うファイル名と保存方法を決めよう。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。