web-dev-qa-db-ja.com

コマンドの最後のダッシュ「-」はどういう意味ですか?

次のコマンドがあるとします。

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

コマンドの最後にある-はどういう意味ですか?それはある種のプレースホルダーですか?

82
Eugene S

この場合、「標準入力」を意味します。これは、ファイル引数が必要で、代わりにstdinを使用する必要がある場合に、一部のソフトウェア(tarなど)によって使用されます。これはシェル構造ではなく、使用しているプログラムによって異なります。疑問がある場合は、マンページを確認してください。

この場合、標準入力は-fオプションの引数です。 -がサポートされていない場合は、tar xvf /proc/self/fd/0またはtar xvf /dev/stdin(後者はさまざまなuniceで広くサポートされています)のようなものを使用して問題を回避できます。

「標準入力」を普遍的に意味するものとしてこれに依存しないでください。シェルでは解釈されないため、すべてのプログラムで自由に処理できます。場合によっては、標準的なoutputまたはまったく異なるものです。suでは、「ログインシェルの開始」を意味します。それ以外の場合は、まったく解釈されません。私が慣れている一部のプログラムの一部のバージョンはダッシュを理解できなかったため、筋肉のメモリが-という名前のかなりの数のファイルを作成させました。

86
Alexios

この場合、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を明示的に呼び出す必要はありません。

14
Konrad Rudolph