次のコマンドがあるとします。
gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf –
コマンドの最後にある-
はどういう意味ですか?それはある種のプレースホルダーですか?
この場合、「標準入力」を意味します。これは、ファイル引数が必要で、代わりにstdinを使用する必要がある場合に、一部のソフトウェア(tar
など)によって使用されます。これはシェル構造ではなく、使用しているプログラムによって異なります。疑問がある場合は、マンページを確認してください。
この場合、標準入力は-f
オプションの引数です。 -
がサポートされていない場合は、tar xvf /proc/self/fd/0
またはtar xvf /dev/stdin
(後者はさまざまなuniceで広くサポートされています)のようなものを使用して問題を回避できます。
「標準入力」を普遍的に意味するものとしてこれに依存しないでください。シェルでは解釈されないため、すべてのプログラムで自由に処理できます。場合によっては、標準的なoutputまたはまったく異なるものです。su
では、「ログインシェルの開始」を意味します。それ以外の場合は、まったく解釈されません。私が慣れている一部のプログラムの一部のバージョンはダッシュを理解できなかったため、筋肉のメモリが-
という名前のかなりの数のファイルを作成させました。
この場合、Linuxを実行していると仮定すると、-
は実際にはほとんど役に立ちません。
GNU tar(Linux上のバージョン)は、デフォルトで標準入力からの入力を受け入れます。 notを実行してこの動作が必要で、ファイル名をコマンドライン引数として渡したい場合は、フラグf
を指定する必要があります。
tar xf filename
これは同じです
tar x < filename
または、例のように入力がgzipされている場合:
gzip -dc filename | tar x
ここでf
フラグを指定しても意味がありませんが、指定されているため、ファイル名を-
として指定して、標準入力から読み取ることを示す必要があります(他の回答)。繰り返しますが、これは冗長で、少し奇妙です。
さらに、GNU tarはgzip
フラグを指定してz
自体を介して入力をストリーミングするように指示できるため、上記の行を簡略化できます。
tar xfz filename
– gzip
を明示的に呼び出す必要はありません。