以下の例のように置換コマンドを実行すると実行順序が壊れるのはなぜですか?まずchmod
コマンドを実行してecho 1
からecho 2
?
echo $(echo 1; echo 2; chmod 444 nonexistent_file)
結果:
chmod: Cannot access 'nonexistent_file': No such file or directory
1 2
答え1
実行順序が壊れておらず、出力順序が期待したものとは異なります。
echo 1
実行し、echo 2
出力を標準出力に書き込みます。シェルはコマンド置換のためにそれを蓄積します。その後、chmod
エラーメッセージを発行し、標準エラーとして印刷します。標準エラーは端末に直接移動するため、エラーが最初に来ます。最後に、外部echo
実行命令は結果「1 2 」を置き換える。