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

コマンドがStdoutとStderrの両方を端末またはファイルに送信しないようにしますか?

この質問にはすでに回答があります :/ dev/nullへのリダイレクト

(6つの回答)
6年前に閉鎖されました。

プログラムがstdoutおよびstderrを端末、ファイル、またはデバイスに送信しないようにしたいと思います。このため、私は3つのコマンドを頭に入れていますが、それらの違いを区別することはできません。それぞれの意味を教えてください。

# ./run > /dev/null
# ./run > /dev/null 1>&2
# ./run > /dev/null 2>&1

承認された回答:

# ./run > /dev/null

これにより、stdoutが/dev/nullにリダイレクトされます 、しかし、stderrでは何もしません。 stdoutとstderrからリダイレクトするように要求したので、これはあなたが望むことをしません。

# ./run > /dev/null 1>&2

これにより、stdoutが/dev/nullにリダイレクトされます 、次にstdoutを再度リダイレクトします(1> )stderrが(&2を指す場所に )これはおそらくターミナルであり、リダイレクトする前にstdoutがポイントした場所である可能性があります。したがって、ここでの正味の効果は、(おそらく)stdoutのリダイレクトがまったくないことであり、stderrに関しては、それでも何もしません。したがって、これもあなたが望むものではありません。

# ./run > /dev/null 2>&1

これにより、stdoutが/dev/nullにリダイレクトされます 、次にstderrをリダイレクトします(2> )stdoutが指す場所、つまり/dev/nullへ リダイレクトした場所だからです。これはあなたが望むもののようです。

違いがわかりません。

実際には、違いを非常に簡単に区別できるはずです。 ./runとしましょう これが含まれています:

#!/bin/sh
echo stdout
echo stderr >&2

その場合、結果は次のようになります。

# ./run > /dev/null
stderr
# ./run > /dev/null 1>&2
stdout
stderr
# ./run > /dev/null 2>&1

違いは明らかです!


Linux
  1. 別のshファイルからshファイルを実行する方法

  2. ターミナルウィンドウからLinuxでファイルを作成するには?

  3. プロセスの実行中に stdout をリダイレクトする - そのプロセスが /dev/null に送信するのは何ですか

  1. /dev/sdb:そのようなファイルやディレクトリはありません (ただし /dev/sdb1 などは存在します)

  2. Linux:/dev/console 、 /dev/tty 、 /dev/tty0 の違い

  3. echo または print /dev/stdin /dev/stdout /dev/stderr

  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

  3. /dev/tcp を使用するために < または > が必要な理由