スクリプトを次のように変更します。
Command1 | tee >(grep sth || Command2)
望ましい結果を達成するために。
サブシェルについて一言
>(....)
サブシェルです。そのサブシェル内で行うすべてのこと (上記のサブシェルの終了ステータスを除く) は、外部の世界から完全に分離されています: number が定義されているサブシェル内でのみ意味を持つため(a=1); echo $a
、 number をエコーすることはありません。1
a
理由はよくわかりませんが、サブシェルにリダイレクトすると、そのサブシェルの終了ステータスが逆になり、失敗が返さtrue
れ、成功が返されるようfalse
です。
echo 'a' >(grep 'b') && echo false
# false
(exit 1) || echo false
# false
したがって、私の最初の提案がうまくいかない場合は、次のようにスクリプトを書き直してみてください。
Command1 | tee >(grep sth) && Command2
例
a=1 # `a` now equals `1`
# if I run `exit`, $a will go out of scope and the terminal I'm in might exit
(exit) # $a doesn't go out of scope because `exit` was run from within a subshell.
echo $a # $a still equals `1`
サブシェルについて詳しく知ることができる場所
サブシェルから親シェルの変数を設定する
KSH で変数を子から親に渡す 変数の
値がサブシェル
http://www.tldp.org/LDP/abs/html/subshel
ls.html http://mywiki.wooledge で失われる。 org/SubShell
http://wiki.bash-hackers.org/syntax/expansion/proc_subst