2017-07-28 2 views
3

は、私は次のスクリプトは、単に「こんにちは」と「1」とし、終了し、印刷するだろうと思ったが失敗することはありません、渡すコマンドの前に感嘆符は、まだスクリプトが

#!/bin/bash -e 

! echo hello 
echo world 

はしかし、それは次のスクリプトは1で終了0

hello 
world 

を出力して終了します

#!/bin/bash -e 

! echo hello 

はので、次

#!/bin/bash -e 

echo hello | grep world 
! echo hello 
echo world 

を行いますが、何らかの理由で-eオプションは、コマンドが原因に失敗の終了コードを返したときにスクリプトを失敗し管理していません!途中で。誰かがこれについて私が気分を良くする説明を提供できますか?

+1

ところでこの問題を回避するには、 'です!エコーハロー||出口1 '。 – Alex028502

答えて

2

http://www.gnu.org/software/bash/manual/bashref.html#The-Set-Builtin

-eコマンドは、ループ、またはコマンドが0を返すが、反転しながらのように、いくつかのケースを除き、ゼロ以外のコードを返す任意のコマンドのスクリプトを失敗します!オプション。したがって、あなたの! echo helloは1(!によって反転0)を返しますが、-eオプションは失敗しません。

しかし、あなたはexit status 42を作る場合、あなたはあなたのスクリプトが失敗しています。

関連する問題