コマンドが実行されたときの標準I / Oストリームの状態は何ですか?

コマンドが実行されたときの標準I / Oストリームの状態は何ですか?

私はLinuxにさらされてから10日ほどでしたが、英語が悪いです。 I/Oリダイレクト部分を学んでいます。

コマンドが成功すると画面にエラーメッセージは表示されませんが、コマンドが失敗すると画面にエラーメッセージが表示されることがわかります。

たとえば、cat file1コマンドが実行される前に。 stdin、stdout、stderrの状態は何ですか?私が命令した後。標準ストリームの状態はどうですか?

file1 が存在する場合。最終入力はfile1で、最終出力は端末のようです。 (不明です。-0-)エラーメッセージは表示されません。それでは、ここにstderrがないという意味ですか?それともどこにありますか?

ファイルがない場合。エラーメッセージは1つだけです。もしそうなら、これはstdinがなく、stderrをstdoutにリダイレクトするという意味ですか?

これを私に説明することができたり、マニュアルページなどを使用するなど、いくつかの手がかりを提供していただきありがとうございます。

ベストアンサー1

一般的にstdinstdoutおよびstderr常に存在します。

ls -l /proc/self/fd

ただし、すべてのコマンドがそれを使用するわけではありません。コマンドが作成された場所を確認できます。

> strace -e trace=write cat nonexistfile
write(2, "cat: ", 5cat: )                    = 5
write(2, "nonexistfile", 12nonexistfile)            = 12
write(2, ": No such file or directory", 27: No such file or directory) = 27
write(2, "\n", 1
)                       = 1

またはより簡単に:比較

command >/dev/null

そして

command 2>/dev/null

おすすめ記事