回答:
この場合、「標準入力」を意味します。tar
ファイル引数が必要で、代わりにstdinを使用する必要がある場合、一部のソフトウェア(例)で使用されます。これはシェル構造ではなく、使用しているプログラムによって異なります。疑問がある場合は、マンページを確認してください!
この場合、標準入力は-f
オプションの引数です。-
がサポートされていない場合は、tar xvf /proc/self/fd/0
またはのようなものを使用tar xvf /dev/stdin
して回避できます(後者はさまざまな大学で広くサポートされています)。
「標準入力」を一般的に意味するためにこれに依存しないでください。それはシェルによって解釈されないため、すべてのプログラムは自由に処理できます。場合によっては、それは標準出力またはまったく異なるものです:su
それは「ログインシェルを開始する」ことを意味します。それ以外の場合は、まったく解釈されません。マッスルメモリを-
使用すると、以前使用したプログラムのバージョンがダッシュを理解できなかったため、かなり多くのファイルが作成されました。
STDOUT
コンテキストに応じて、を意味することもあります。
/dev/stdin
または/dev/stdout
、本当に入出力ストリームが必要な場合に使用できます。これはストリームであることに注意してください。ファイルをシークしたいプログラムは、-
(たとえばffmpeg)
bash
、ハイフンはシェルによって解釈されます。Advanced Bash-Scripting Guide-Chapter 3. Special Charactersを参照して、テキスト[dash]または「redirect from / to stdin or stdout」を検索してください。を使用bash
すると、ファイル名を期待するほとんどの場所でハイフンを使用できます。<|を補完するものです。>私見
cat
ハンドル-
(マンページを確認)。シェル組み込みバージョンのcat
場合はそうかもしれませんが、それは厳密にはシェル全体ではありません。また、シェルがを処理した場合、-
echo -
と言うことができ、他の何かに展開されます。代わりに、ダッシュをエコーします(/dev/stdin
またはではありません/proc/self/fd/0
)。とecho test > -
呼ばれるファイルを作成するだけな-
ので、明らかにそこでも処理されません。ああ、そしてあなたがリストしたページは、それがシェルによって処理されているとは言っていません。cat
そしてdiff
、あなたはそれをand とともに使用できると言っています。どちらも明示的にダッシュを理解します。
この場合、-
Linuxを実行していると仮定すると、実際にはかなり役に立ちません:
GNU tar(Linux上のバージョン)は、デフォルトで標準入力からの入力を受け入れます。あなたがない場合ではない、この動作をしたい、とコマンドライン引数としてファイル名を渡したい、あなたはフラグを指定する必要がありますf
:
tar xf filename
これは次と同じです
tar x < filename
または、入力が例のようにgzip圧縮されている場合:
gzip -dc filename | tar x
f
ここでフラグを指定することは意味がありませんが、指定されているため-
、標準入力から読み取ることを示すためにファイル名を指定する必要があります(他の回答を参照)。繰り返しますが、これは冗長であり、少し奇妙です。
さらに、フラグをgzip
指定することにより、GNU tarがそれ自体を通して入力をストリーミングするように指示できるため、上記の行を単純化できますz
。
tar xfz filename
– gzip
明示的に呼び出す必要はありません。
tar
にz
オプションがあるわけではありません。
tar
は、歴史的な理由により、デフォルトで最初のテープドライブを使用しています。
/dev/sa0
になっています(FreeBSD 9.0、/dev/rst0
NetBSD 6.0、およびOpenBSD 5.1)。AIX 7.1のデフォルトは/dev/rmt0
です。MINIX3のデフォルトは/dev/sa0
です。(それぞれ最新のOSバージョンをチェックしましたが、これらは「古いメインフレーム」ではありません。)Solarisは、のファイルを使用して構成できます。/etc
デフォルトはテープドライブです。GNU tar、シリングtar、OSX、およびBusyBoxのデフォルトはstdin / stdoutです。
tar
デフォルトで2番目のテープドライブに再コンパイルしました。:)
-
すべき小さな詳細:コマンドの最後にある必要はありません。例:ls -l | diff - /old_ls_output.txt
。