スクリプトで「3>&1 1>&2 2>&3」は何をしますか?

スクリプトで「3>&1 1>&2 2>&3」は何をしますか?

スクリプトで次の行を見ました。

DEVICE=`dialog --inputbox "Festplatten-Laufzeit auslesen. Gebe Sie das 
gewünschte Device an: " 0 70 "" 3>&1 1>&2 2>&3`

何ですか

3>&1 1>&2 2>&3

行為? 1 = stdoutと2 = stderrを知っていますが、3and&の用途は何ですか?

ベストアンサー1

この数字はファイル記述子で、最初の3つ(0から始まる)のみが標準化された意味を持ちます。

0 - stdin
1 - stdout
2 - stderr

したがって、コマンドの各数字はファイル記述子を表します。ファイル記述子をファイルにリダイレクトする>か、別のファイル記述子にリダイレクトできます。>&

3>&1コマンドラインは新しいファイル記述子を作成し、それに1リダイレクトしますSTDOUT。次に、1>&2ファイルディスクリプタ1をリダイレクトSTDERRし、2>&3ファイルディスクリプタ2を3にリダイレクトしますSTDOUT

STDOUTしたがって、デフォルトでおよびを切り替えると、STDERR次の手順が実行されます。

  1. 新しいfd 3を作成し、fd 1を指します。
  2. ファイル記述子1をファイル記述子2にリダイレクトします。 3でファイル記述子を保存しないと、ターゲットが失われます。
  3. ファイル記述子2をファイル記述子3にリダイレクトします。これで、ファイル記述子1とファイル記述子2が置き換えられました。

プログラムがファイルディスクリプタ1に何かを印刷すると、ファイルディスクリプタ2にも印刷され、その逆も同様です。

おすすめ記事