sed
bashサブシェル出力をデフォルト/ルートシェル環境変数に入れるには?
それは失敗するでしょう、
v=`echo NO |tee >(sed 's/^/&YES/' )`
実際の状況を解決するには?
答え1
動作します(Linux Mint 18.1、GNU bash、バージョン4.3.48)。
Paul--) unset v
Paul--) v=`echo NO |tee >(sed 's/^/&YES/' )`
Paul--) declare -p v
declare -- v="NO
YESNO"
あなたはそれが何をすることを期待していますか?問題は、プロセス代替構文である>(..)を使用していることです。
teeはNOをコピーしてsedを介して送信します。したがって、teeは生データをNO\n
標準出力に出力しますが、sedは別々のプロセスとして実行され、標準出力に送信さNOYES\n
れます。バックティックでのコマンド置換はv
。
sedは別のプロセスで実行され、過去にはbashが完了するのを待たない問題がありました。したがって、特に2番目のプロセスに時間がかかる場合、この構成では競合状態が発生する可能性があります。