GNU/Linux >> Linux の 問題 >  >> Linux

単一のパイプ コマンドの pipefail の設定

pipefail を回避するには、Bash コマンド ラインからサブシェルを呼び出す必要があります。 後で設定:

$ (set -o pipefail && command1 | command2 | command3)

これにより、 pipefail の効果が制限されます 括弧 (...) で作成されるサブシェルのオプション .

実際の例:

$ (set -o pipefail && false | true) && echo pipefail inactive || echo pipefail active
pipefail active

-c で明示的なシェル呼び出しを使用する場合 bash を使用しても、サブシェルは必要ありません。 または sh bash へのエイリアス :

$ bash -c "set -o pipefail && false | true" && echo pipefail inactive || echo pipefail active
pipefail active
$ sh -c "set -o pipefail && false | true" && echo pipefail inactive || echo pipefail active
pipefail active

sh以降 pipefail を受け入れません オプション、私はそれが bash の古いバージョンまたは変更されたバージョンのいずれかであると想定する必要があります - または、実際には完全に別のシェルです。


上記に言及しなかった理由は不明ですが、pipefail を明示的に設定解除することは可能です。 、 set +o pipefail を使用 .

set -o pipefail
command1 | command2 | command3
set +o pipefail

フラグメントを実行していて、pipefail について不明な場合 すでに設定されている場合は、以前に提案されたようにサブシェルでこれを使用できます:

# explicitly execute with pipefail set
(set -o pipefail ; command1 | command2 | command3 )
# explicitly execute with pipefail unset
(set +o pipefail ; command1 | command2 | command3 )

Linux
  1. Bash履歴で実行する各コマンドの日付と時刻を設定する

  2. 別のコマンドの単一引用符と二重引用符を含むコマンドをラップしますか?

  3. 新しい irssi 接続にデフォルトのニックネームを設定するにはどうすればよいですか?

  1. 初心者向けのDNFコマンドの例

  2. 単一行の場合はバッシュ

  3. man ページを開き、1 つのコマンドで文字列を検索する

  1. コマンド単一引数の最大サイズを定義するものは何ですか?

  2. Gnu-screenの「コマンド文字」を定義するための包括的な可能性のセットを作成するにはどうすればよいですか?

  3. 単一のコマンドに対してBashでエイリアスを無効にする方法は??