Bash

‘-’ 在 bash 重定向中如何工作?

  • January 16, 2018

我以前在某處看到過這個解釋,但現在找不到參考。來自 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讀取文件foostdin.

在 的情況下apt-key手冊頁暗示為add子命令提供文件名是強制性的,並且-必須指定使用stdin. 請記住,由應用程序來做它想做的事情,並讀取它想要的任何輸入;沒有什麼需要任何程序來閱讀stdin。將其用作預設輸入源只是一種習慣。

有些程序不支持-as meaning stdin,而是將其作為文字文件名。在這些情況下,像這樣的變通方法/dev/stdin是必要的。


至於>&-,我看不出它們會被明確連接。這可能只是一個簡單字元的巧合使用。>&-破折號可能來自與罷工的聯繫,意思是“什麼都沒有”,一個空白的欄位。為什麼用它來表示stdin,我不知道。但它看起來比這樣更好%,並且許多其他字元具有其他含義。

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