Pipe

此 curl/tar 範例中裸破折號的含義

  • December 20, 2017

我從這個 SO 答案中知道,各種 Unix 實用程序使用裸破折號來指定使用者想要使用標準輸入或標準輸出而不是正常文件。

但是,這並不能幫助我理解以下的語法(我從 Heroku buildpack 中獲取,它基本上在目錄中安裝了 Perl 的副本)。總的來說,正在發生的事情是 Perl 正在從一個 URL 下載 $ PERL_PACKAGE and piped to tar, which extracts it to the directory $ VENDORED_PERL

curl $PERL_PACKAGE -s -o - | tar xzf - -C $VENDORED_PERL

但是細節有點混亂。-o 用於指定輸出文件而不是標準輸出,所以我不明白為什麼要使用該選項,然後使用破折號,而不是根本不使用該選項。

至於 tar,我猜 - 告訴它不要使用輸入文件,因為它正在接收來自管道的輸入?

也許我錯過了管道如何工作的一些要求。

我不認為你缺少任何東西。你提到的選項在我近年來使用的所有 shell 和實現中curl都是不必要的。tar

我會這樣寫那一行:

curl "$PERL_PACKAGE" -s | tar xz -C "$VENDORED_PERL"

也就是說,沒有不必要的文件名選項,並且對用作命令行參數的變數進行了保守的雙引號。

他們為什麼要這樣寫?可能是舊習慣。或者一些舊系統,舊實現,這些參數過去是必需的。而且由於腳本按原樣執行,因此無需“修復”。

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