最後のコマンドだけでなく、すべてのコマンドの出力をファイルにリダイレクト

最後のコマンドだけでなく、すべてのコマンドの出力をファイルにリダイレクト

echoを使用してファイルにヘッダーを追加し、コマンドを使用してファイルの残りの部分を作成したいと思います。これは、2つの別々のコマンドを使用することを意味します。

リダイレクトでは、2つのコマンドの出力をファイルに書き込むことができますか?

頑張った

echo "header line" | cut -c 1-5 input_file > output_file

echo "header line"; cut -c 1-5 input_file > output_file

これはcutコマンドの出力のみをリダイレクトします。

次のコマンドはうまくいきますが、愚かな感じです。

echo "header line" > output_file; cut -c 1-5 input_file >> output_file

私の問題を解決する賢明な方法は何ですか?

ベストアンサー1

あなたが探しているもの:

{ echo "header line"; cut -c 1-5 input_file; } > output_file
  • この構文は、コマンドがサブシェルではなく現在のシェルで実行されるため、副作用はありません。
  • 出力ファイルに入るコマンドは明確に区別されます。
  • スケーラビリティが非常に優れているため、次のように書き直すことができます。

{
  echo "header line"
  cut -c 1-5 input_file
  ... # insert new commands here
} > output_file

エラーを同じファイルに出力するには、次のように最後の行を修正します。

} > output_file 2>&1

このヒントを提供してくれたOlivier Dulacに感謝します。

ブロック内のいくつかの出力を画面に表示するには、次の構文を使用できます。

{
  echo "header line"
  echo "this line doesn't go to output_file" > /dev/tty
  cut -c 1-5 input_file
} > output_file

おすすめ記事