$ command 1>&2
効果は何ですか?私が理解しているところによると、これは実行されますがcommand
。STDOUT
にリダイレクトされますSTDERR
。しかし、それがどのように機能するのか正確にはわかりません>&
。
$ command 1>&2
私はそれを来ると思います$ command 2>&1
。
私は1
それぞれが と のファイル記述子であると仮定します2
が、それが何を意味するのかさえわかりません。STDOUT
STDERR
私はSOや他のリソースから>&
何らかのリダイレクト「モノ(オペレータ??)」を見つけましたが、それが正確にどのように機能するのかわかりません。バイナリ演算子ですか?それも通信会社ですか?
誰かがこれを説明できますか?初心者これが実行するアクションの用語です。
答え1
1
この構文では、STDOUTとSTDERRが正しいです2
。その役割は「AをBのある所に送ること」です。したがって、を作成してSTDERRをインポートしてSTDOUTに送信すること2>&1
もできます。2 > &1
元のSTDOUTである必要はありません。実際は一つの単位ではなく>&
、しばしばそのように一緒に作成されます。これが>
「リダイレクト」演算子です。
面白い部分は注文です。たとえば、次のようになります。
$ command 2>&1 > file.out
とは違う
$ command > file.out 2>&1
1 つ目は STDERR を STDOUT に送り、STDOUT を "file.out" に送るので、STDERR と STDOUT を同じ場所に取得します。 2つ目はSTDOUTを「file.out」に送信し、STDERRをSTDOUTに送信するため、最終的にはファイルではなく端末ウィンドウにSTDERRが表示されます。
答え2
&
開かれていないファイルへのパス(デフォルト)ではなく、シェルで開かれたファイル記述子に指定するプレフィックスです。STDOUT
ほとんど常にファイル記述子1
でありSTDERR
、ほぼ常に2
。
山かっこと同様に、シェルは通常、前の数字がファイル記述子になることを知っているほどスマートです。これらのいずれかを省略すると、通常はSTDOUT
for>
とSTDIN
forについて話していると仮定します<
。
だからこれをまとめると:
# command > /tmp/myFile
# command 1> /tmp/myFile
両方とも名前付きフラットファイルを直接command
指します。STDOUT
/tmp/myFile
# command >&2
# command 1>&2
両方とも、ファイル記述子(STDERR)で開かれたファイルを直接command
指します。STDOUT
2
# command 2>&1
通常、記録されたすべてのエントリをSTDERR
ファイル記述子番号1
(STDOUT
)にリダイレクトします。
これは、シェル自体で実行されるすべての種類のファイルI / Oに共通です。問題の特定のファイル記述子はしばしばそれ自体で特別な意味を持ちます。
STDERR
ファイルにリダイレクトするには、2
指定されたファイルにファイル記述子を割り当てるように指示することもできます。
# command 2> /tmp/newFile
たとえば、
[root@edc4 ~]# ./causeError 2>/tmp/containError
[root@edc4 ~]# cat /tmp/containError
Error Message
[root@edc4 ~]#
バッシュガイドを使用する方法の詳細 一般的な3つの( 、 、 )以外のbash
ファイル記述子でファイルを開くことができますが、これは通常より複雑なスクリプト用に予約されており、人々は通常一般的な3つですが処理します。それにもかかわらず、人々は通常公平に扱われます。0
1
2
1
2
答え3
この数値はパイプのインデックス値です。正しく述べたように、0は標準入力、1は標準出力、2は標準エラーです。必要に応じてさらに作成できます。ちなみに、この3つはプロセスの入出力を処理するために生成された基本ファイルです。 chevron>を使用すると、データフローを新しい記述子にリダイレクトできます。たとえば、ファイルを表示したくない場合( cmd > ~/somefile.out )、何も表示したくない場合( cmd > /dev/null )、パイプを閉じることもできます( cmd > &- )。これ。ただし、stdinとstdoutを置き換えるには、次のこともできます(cmd 3>&2 2>&1 1>&2)。
重要なのは、これを電線と考えることです。以前の学校派遣者のように、デフォルトの場所に接続されているワイヤーラベル0、1、2で始まり、>ワイヤーが接続されている場所を切り替えることができます。