Bash
‘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,但是 the
3
和&
for 是什麼?
這些數字是文件描述符,只有前三個(從零開始)具有標準化含義:
0 - stdin 1 - stdout 2 - stderr
因此,您的命令中的每個數字都指的是一個文件描述符。您可以將文件描述符重定向到一個文件
>
或將其重定向到另一個文件描述符>&
命令行中的
3>&1
將創建一個新的文件描述符並將其重定向1
到STDOUT
. 現在1>&2
將文件描述符 1 重定向到STDERR
並將2>&3
文件描述符 2 重定向到 3,即STDOUT
.所以基本上你切換了
STDOUT
,STDERR
這些是步驟:
- 創建一個新的 fd 3 並將其指向 fd 1
- 將文件描述符 1 重定向到文件描述符 2。如果我們沒有將文件描述符保存在 3 中,我們將失去目標。
- 將文件描述符 2 重定向到文件描述符 3。現在文件描述符 1 和 2 被切換。
現在,如果程序將某些內容列印到文件描述符 1,它將被列印到文件描述符 2,反之亦然。