私の環境:zsh、macOS
関連コマンド:
echo 'hi' | tee > a b c
echo 'hi' > a b c
a
コマンド1は名前があり、内容をb
含むファイルを生成します。c
hi
a
コマンド2はcontentというファイルを生成しますhi b c
。
AFAIK、ちょうどコマンド1を使用してくださいいいえ >
次のマンページに文書化されていますtee
。
echo 'hi' | tee a b c
>
上記のコード(コマンド1など)を追加すると、まだ複数のファイルが生成されますが、コマンド2は1つのファイルのみが生成される理由を理解するのに役立ちます。
答え1
リダイレクト(>
この場合)は、次のパラメータをリダイレクトターゲットとして「使用」します。だから
echo 'hi' | tee > a b c
等しい
echo 'hi' | tee b c > a
tee
入力をにコピーb
し、c
標準出力をにコピーしますa
。
echo 'hi' > a b c
等しい
echo 'hi' b c > a
標準出力に出力しhi b c
、これはa
。
答え2
これはデフォルトのシェル構文です。リダイレクト演算子は、>
標準出力をリダイレクトするファイル名として使用される1つの引数のみを受け入れます。残りのパラメータはコマンドに渡されます。
したがって、最初のコマンドは次のようになります。
echo 'hi' | tee > a b c
コマンドを実行してecho 'hi' | tee b c
標準出力をファイルにリダイレクトしますa
。結局のところ、tee
標準入力は標準出力だけでなく、引数として提供されたすべてのファイルにコピーされます。したがって、エクスポートされたデータはファイルにコピーecho 'hi'
され(ファイルリダイレクトを介して)標準出力にコピーされます。tee
b
c
a
2番目のコマンド:
echo 'hi' > a b c
コマンドを実行して、echo 'hi' b c
標準出力をファイルにリダイレクトしますa
。生成されたファイルを見るとa
テキストが含まれていることがわかりますがhi b c
、最初の場合は生成された3つのファイルすべてがテキストのみを含みますhi
。
答え3
tee
標準入力ストリームを取得し、指定されたファイルと標準出力にコピーを送信します。を使用すると、ファイルへの通常の書き込み中に> a
標準出力ストリームをファイルにキャプチャできます。a
tee
b
c
> filename
|
適切な間隔を置いてエスケープされない限り、側面の任意の点に現れることがあります。
これを説明するために、以下は同義語です。
echo hi | > a tee b c
echo hi | tee > a b c
echo hi | tee b > a c
echo hi | tee b c > a