2013-10-17 50 views
6

如果我有以下bash命令:如何在使用循環時使makefile退出時出錯?

for i in ./ x ; do ls $i ; done && echo OK 

「LS ./」 被執行,然後 「LS x」 的,它失敗(x被丟失的)和不打印行。

如果

for i in x ./ ; do ls $i ; done && echo OK 

那麼即使 「LS X」 失敗,因爲在最後一條語句for循環成功,那麼OK打印。

x: 
    for i in $(LIST) ; do \ 
     cmd $$i ;\ 
    done 

我怎樣才能讓讓如有CMD的個人執行的失敗,失敗:在生成文件使用shell時for循環,這是一個問題嗎?

回答

15

使用break命令時,命令失敗

x: 
    for i in $(LIST) ; do \ 
     cmd $$i || break ;\ 
    done 

這不會使生成文件中止,終止循環,但。你可以改爲使用非零代碼的exit

x: 
    for i in $(LIST) ; do \ 
     cmd $$i || exit 1 ;\ 
    done 
+0

似乎並不奏效。用ls和LIST = non_existing_file替換cmd,然後在「ls non_existing_file」失敗後繼續其快樂方式。 – user48956

+0

由於出口1按需要工作。 – user48956

+4

另一種選擇是在運行循環之前設置-e。 – reinierpost