一連のコマンドをパイプ/リダイレクト

一連のコマンドをパイプ/リダイレクト

現在、次の設定を使用して複数のコマンドの出力をリダイレクトします。

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

おすすめ記事