走る
bash -c 'bash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;'
結果はtest1
コンソールに印刷されecho $?
、コマンドが内部的に返された内容を1
返さなければならないので私には正しいようです。[b/d]ash -c
dash -c 'dash -c "echo test1; exit 1;" &> /tmp/x; buildresult=$?; tail -n 100 /tmp/x; exit $buildresult;'
同じ出力を生成しますが、0
それに応じて返されますecho $?
。
シェルと移植可能なシェルプログラミングの理解を広げるために、この違いを理解したいと思います。
私はUbuntu 17.10(Artful Aardvark)でbash
4.4.12と0.5.8-2.3ubuntu1を使用しています。dash
答え1
&>
POSIXにはリダイレクトはありません。の影響を受けませんdash
。解析さ& >
れるので、コマンドは代わりにバックグラウンドで実行されます。バックグラウンドコマンドの終了ステータスは0です。親の観点から見ると、あなたが読んでも辞めなかったからです$?
。
これが(少なくとも私にとっては)test1
プロンプトに出力が表示される理由です。後ろにコマンドが完了しました。
バッシュに&> foo
相当する> foo 2>&1
、移植可能なスクリプトは後者を使用する必要があります。