コマンドラインアプリケーションはいつ標準エラーストリームを使用しますか?

コマンドラインアプリケーションはいつ標準エラーストリームを使用しますか?

コマンドラインアプリケーションを作成するときにエラーをいつ使用するかについての指示はありますか?驚いたことに、グーグルをやってみたら何も出てこなかった。

特に、現在懸念されているのは、ユーザーが誤ったパラメータを使用してプログラムを呼び出すかどうかstdoutです。stderrしかし、ユーザーが期待する方法で動作するプログラムを作成するために明示的な規則が必要な唯一のケースではないので、より包括的な答えをいただきありがとうございます。

ベストアンサー1

stderrはい、無効なパラメータが使用されている場合は常にメッセージが表示されます。これによりアプリケーションが終了する場合は、ゼロ以外の終了状態で終了してください。

標準エラーストリームを使用する必要があります。診断情報またはユーザーの対話のため。診断メッセージには、ユーティリティが正しく実行されたときにユーティリティ出力の一部ではないエラーメッセージ、警告、およびその他のメッセージが含まれます。 「正しい」とは、ファイルが見つからない、または他の何も起こらないなど、異常なことが起こらないことを意味します。

多くのシェル(すべて?)はプロンプト、ユーザーが入力した内容、メニューなどを表示するため、リダイレクトがstderr意味stdoutのある方法でシェルと対話するのを妨げません。

次の内容は、以下から取得したものです。ブログ投稿このトピックに関して:

これはUnixパイプの発明者であるDoug McIllroyがその誕生プロセスを説明する引用ですstderr。 「v6」は、1975年にリリースされた元のUnixオペレーティングシステムの特定のバージョンを表します。

すべてのプログラムは標準出力に診断情報を配置します。これは出力がファイルにリダイレクトされると常に問題を引き起こしますが、疑わしいプロセスに出力が送信されると耐えられなくなります。それにもかかわらず、人々は標準 - 内 - 標準 - 出力モデルの単純さを破壊することを嫌がったため、これはv6で許可されました。その直後、Dennis Ritchieは標準エラーファイルを導入してこの問題を解決しました。しかし、これだけでは十分ではありません。パイプを使用すると、同時に実行される複数のプログラムから診断情報を取得できます。自分を識別するには診断情報が必要です。 ——Doug
McIllroy, "UNIX研究: プログラマーズマニュアルで注釈付き抜粋、1971-1986"

「アイデンティティを確認してください」とは単に「はい!私の話です!何か間違っています:[...]」と言うことを意味します。

$ ls nothere
ls: nothere: No such file or directory

stderrそれ以外の場合は、読んでいるすべての項目で読むことができるので、これを行う方が良いですstdout(ただし、lsとにかく私たちはそんなことしません。、そうすべきでしょうか? )。

おすすめ記事