命令末尾的破折號“-”是什麼意思?

命令末尾的破折號“-”是什麼意思?

給出以下命令:

gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf –

-命令末尾的是什麼意思?它是某種佔位符嗎?

答案1

在這種情況下,它意味著“標準輸入”。tar當需要檔案參數並且您需要使用 stdin 時,某些軟體(例如 )會使用它。它不是 shell 構造,它取決於您正在使用的程式。如果有疑問,請檢查線上幫助頁!

在本例中,標準輸入是選項的參數-f。如果-不支持,您可以使用類似tar xvf /proc/self/fd/0or的東西tar xvf /dev/stdin(後者在各種 unice 中得到廣泛支持)。

不要依賴它來表示普遍的“標準輸入”。由於它不被 shell 解釋,因此每個程式都可以隨意處理它。在某些情況下,這是標準的輸出或完全不同的東西:su它表示“啟動登入外殼”。在其他情況下,它根本不被解釋。肌肉記憶使我創建了相當多的文件,-因為我習慣的某些程式的某些版本不理解破折號。

答案2

在這種情況下,-假設您運行的是 Linux,則實際上毫無用處:

GNU tar(Linux 上的版本)預設接受標準輸入的輸入。如果你這樣做不是想要這種行為,並且想要將檔案名稱作為命令列參數傳遞,那麼您需要指定標誌f

tar xf filename

所以這與

tar x < filename

或者,如果輸入被壓縮,如您的範例所示:

gzip -dc filename | tar x

這裡指定標誌根本沒有意義f,但是因為指定了該標誌,所以需要給出檔案名稱以-表明我們要從標準輸入讀取(請參閱其他答案)。所以,重複一遍,這是多餘的,而且有點奇怪。

gzip此外,上面的行可以簡化,因為可以透過指定標誌來告訴 GNU tar 透過自身串流輸入z

tar xfz filename

– 無需gzip明確調用。

相關內容