現在、次の設定を使用して複数のコマンドの出力をリダイレクトします。
echo "Some normal commands"
(
echo "Error: something happened"
echo "Warning: this incident will be logged"
) >> logfile
echo "More normal commands"
これは非常に便利で、パイプでも機能します。
これが最善の方法ですか?考慮すべき他のオプションはありますか?
ベストアンサー1
別の方法は、括弧の代わりに中括弧を使用することです。この変更を実行するコマンド現在のシェル、そこにいないサブシェル
echo "Some normal commands"
{
echo "Error: something happened"
echo "Warning: this incident will be logged"
} >> logfile
echo "More normal commands"
引用:https://www.gnu.org/software/bash/manual/bashref.html#Command-Grouping
これは、グループ内で変数を変更する場合に特に重要です。
$ x=5; ( x=10; echo inside: $x; ); echo outside: $x
inside: 10
outside: 5
$ x=5; { x=10; echo inside: $x; }; echo outside: $x
inside: 10
outside: 10