GNU/Linux >> Linux の 問題 >  >> Linux

一部の Linux プログラムの出力が STDOUT にも STDERR にも出力されないのはなぜですか?

この質問は BashFAQ/032 で取り上げられています。あなたの例では:

{ time sleep 1; } 2> /dev/null

その理由

time sleep 1 2>/dev/null

期待どおりに動作しないのは、その構文で time したいからです コマンド sleep 1 2>/dev/null (はい、コマンド sleep 1 stderr/dev/null にリダイレクト )。組み込みの time これを実際に可能にするために、そのように機能します。

bash ビルトイン 実際にこれを行うことができます...まあ、それは組み込みです。このような動作は、外部コマンド time では不可能です。 通常は /usr/bin にあります .確かに:

$ /usr/bin/time sleep 1 2>/dev/null
$

さて、あなたの質問への答え

<ブロック引用>

一部の Linux プログラムの出力が STDOUT にも STDERR にも出力されないのはなぜですか?

is:そうです、出力は stdout に送られます または stderr .

これがお役に立てば幸いです!


time に関する特定の質問 builtin は回答済みですが、ある stdout にも書き込まないいくつかのコマンド または stderr へ .古典的な例は、Unix コマンドの crypt です。 . crypt 引数なしで標準入力 stdin を暗号化します そしてそれを標準出力 stdout に書き込みます . getpass() を使用してユーザーにパスワードを要求します 、これはデフォルトでプロンプトを /dev/tty に出力します . /dev/tty 現在の端末デバイスです。 /dev/tty への書き込み 現在の端末に書き込む効果があります (ある場合は、isatty() を参照してください) ).

理由 crypt stdout に書き込めません 暗号化された出力を stdout に書き込むためです .また、/dev/tty にプロンプ​​トを表示することをお勧めします。 stderr に書き込む代わりに ユーザーが stdout をリダイレクトした場合 と stderr 、プロンプトは引き続き表示されます。 (同じ理由で crypt stdin からパスワードを読み取ることができません 、暗号化するデータの読み取りに使用されているためです。)


Linux
  1. Linuxコマンドdateを使用しているときに特定の時間を追加します

  2. Linux カーネルの pr_debug が何も出力しないのはなぜですか?

  3. 出力が stdout か stderr かを判別する

  1. Linux のパイプ記号 |行う?

  2. コマンドがパイプされたときに slabtop -o が最初の 23 行しか返さないのはなぜですか?

  3. openssl passwd の出力が毎回異なるのはなぜですか?

  1. Unix時間が1970-01-01から始まるのはなぜですか?

  2. Linux 時間コマンドの例

  3. Linux dm-multipath で Lun World Wide ID が数字の 3 で始まる理由