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