私はLinuxにさらされてから10日ほどでしたが、英語が悪いです。 I/Oリダイレクト部分を学んでいます。
コマンドが成功すると画面にエラーメッセージは表示されませんが、コマンドが失敗すると画面にエラーメッセージが表示されることがわかります。
たとえば、cat file1
コマンドが実行される前に。 stdin、stdout、stderrの状態は何ですか?私が命令した後。標準ストリームの状態はどうですか?
file1 が存在する場合。最終入力はfile1で、最終出力は端末のようです。 (不明です。-0-)エラーメッセージは表示されません。それでは、ここにstderrがないという意味ですか?それともどこにありますか?
ファイルがない場合。エラーメッセージは1つだけです。もしそうなら、これはstdinがなく、stderrをstdoutにリダイレクトするという意味ですか?
これを私に説明することができたり、マニュアルページなどを使用するなど、いくつかの手がかりを提供していただきありがとうございます。
答え1
一般的にstdin
、stdout
および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