問題はxargs
とは関係ありません。
bashの-e
オプションはややこしいです。
-e終了直ちに、リスト、又は複合コマンド ( 単一単純なコマンドからなっていてもよい)パイプラインは、非ゼロで終了した場合 ステータス。 が失敗したコマンドが直ちに コマンドリストの一部である場合シェルは、while
又はuntil
キーワード以下&&
で実行される任意 コマンドの一部をif
またはelif
予約語以下の試験 の一部をを終了しませんまたは最終&&
または||
、 パイプライン内の任意のコマンドが、最後の、または次のコマンド 除く||
リストコマンドの戻り値は !
で反転されている場合。
のは、はるかに簡単な例を見てみましょう:「! true
」の終了ステータスが非ゼロであったにも関わらず
$ cat exit_on_error_test.sh
#!/bin/bash
trap 'echo Interrupted because of an error' ERR
set -e
! true
echo Exit status: $?
$ ./exit_on_error_test.sh
Exit status: 1
$
ので、スクリプトが終了し、出力に値を実行させました終了ステータスのそれは、私たちが何らかの失敗コマンドを持っていなかったからです。ゼロ以外の終了コードは意図的な否定によるものです。
ただし、「! true
」をかっこで囲むと、失敗する(複合)コマンドが導入されます。
$ cat exit_on_error_test.sh
#!/bin/bash
trap 'echo Interrupted because of an error' ERR
set -e
(! true) # This as a whole is now a failing (compound) command
echo Exit status: $?
$ ./exit_on_error_test.sh
Interrupted because of an error
$
"grep(no xargs)と一緒に使用すると、これはカッコなしで機能します。*"これは少し不明です。コードを表示してください。 – Leon
_ "スクリプトは終了しません" _も不明です。 –
['set -e'はgotchasでいっぱいです](http://mywiki.wooledge.org/BashFAQ/105)、bashコミュニティが非常に分かれていて、まったくいい考えです。 –