Bash
‘-’ 在 bash 重定向中如何工作?
我以前在某處看到過這個解釋,但現在找不到參考。來自 Docker 的 Ubuntu 入門指南的範例用法:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
我什至非常模糊地記得它應該做什麼。IIRC 正確,它應該以某種方式使用通過管道傳遞的標準輸入。但為什麼在這種情況下這是必要的?
我最接近於在這篇文章中找到任何相關資訊:http: //www.catonmat.net/blog/bash-one-liners-explained-part-three/。也許,它與關閉流有關,例如在打開非標準流然後關閉它的範例中?
exec 3<file exec 3>&-
這不是 Bash 或任何 shell 的特性,而是許多應用程序中明確告訴他們從
stdin
. 當然,stdin
如果沒有提到其他文件,許多程序都會讀取,但即使在這種情況下,您也需要能夠明確指定stdin
是否希望它與其他文件一起處理。例如,cat foo -
已cat
讀取文件foo
和stdin
.在 的情況下
apt-key
,手冊頁暗示為add
子命令提供文件名是強制性的,並且-
必須指定使用stdin
. 請記住,由應用程序來做它想做的事情,並讀取它想要的任何輸入;沒有什麼需要任何程序來閱讀stdin
。將其用作預設輸入源只是一種習慣。有些程序不支持
-
as meaningstdin
,而是將其作為文字文件名。在這些情況下,像這樣的變通方法/dev/stdin
是必要的。至於
>&-
,我看不出它們會被明確連接。這可能只是一個簡單字元的巧合使用。>&-
破折號可能來自與罷工的聯繫,意思是“什麼都沒有”,一個空白的欄位。為什麼用它來表示stdin
,我不知道。但它看起來比這樣更好%
,並且許多其他字元具有其他含義。