給出以下命令:
gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf –
-
命令末尾的是什麼意思?它是某種佔位符嗎?
答案1
在這種情況下,它意味著“標準輸入”。tar
當需要檔案參數並且您需要使用 stdin 時,某些軟體(例如 )會使用它。它不是 shell 構造,它取決於您正在使用的程式。如果有疑問,請檢查線上幫助頁!
在本例中,標準輸入是選項的參數-f
。如果-
不支持,您可以使用類似tar xvf /proc/self/fd/0
or的東西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
明確調用。