Bash

‘3>&1 1>&2 2>&3’ 在腳本中做了什麼?

  • March 24, 2022

我在腳本中看到了這一行:

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,但是 the3&for 是什麼?

這些數字是文件描述符,只有前三個(從零開始)具有標​​準化含義:

0 - stdin
1 - stdout
2 - stderr

因此,您的命令中的每個數字都指的是一個文件描述符。您可以將文件描述符重定向到一個文件>或將其重定向到另一個文件描述符>&

命令行中的3>&1將創建一個新的文件描述符並將其重定向1STDOUT. 現在1>&2將文件描述符 1 重定向到STDERR並將2>&3文件描述符 2 重定向到 3,即STDOUT.

所以基本上你切換了STDOUTSTDERR這些是步驟:

  1. 創建一個新的 fd 3 並將其指向 fd 1
  2. 將文件描述符 1 重定向到文件描述符 2。如果我們沒有將文件描述符保存在 3 中,我們將失去目標。
  3. 將文件描述符 2 重定向到文件描述符 3。現在文件描述符 1 和 2 被切換。

現在,如果程序將某些內容列印到文件描述符 1,它將被列印到文件描述符 2,反之亦然。

引用自:https://unix.stackexchange.com/questions/42728