teeを使用するときにこの変数割り当てが機能しないのはなぜですか?

teeを使用するときにこの変数割り当てが機能しないのはなぜですか?

考慮する:

$ FILE_NAME=`(cat somefile | head -1)` | tee -a dump.txt
$ echo $FILE_NAME

$ 
  1. (cat somefile | head -1)今tee..の出力がstdinに到達できないのはなぜですか?
  2. 出力がteeに達すると、これをdump.txtファイルと標準出力にコピーできます。
  3. 変数$FILE_NAMEも値を受け取りません。

ベストアンサー1

あなたは文章を書きたいかもしれません

FILE_NAME=`(cat somefile | head -1) | tee -a dump.txt`
echo $FILE_NAME

(またはhead -1 somefile猫を取り除く)

` 以外のパイプは論理エラーに近い。これは構文エラーだと思うかもしれませんが、Bashの仕組みではなく、期待した結果を提供しません。

また、変数の割り当てなしで比較:

$ echo hello > somefile
$ `(cat somefile | head -1)` | tee -a dump.txt
bash: hello: command not found

somefileの最初の行はstdoutには反映されませんが、コマンドとして解釈されます。コマンドを実行できないため、teeは出力を取得できず、生成するパイプがないため実際には実行されません。

おすすめ記事