中止

2013-10-21 47 views
0

我有一個zsh的腳本,看起來像這樣中止

comm -23 \ 
    <(git ...) \ 
    <(git ... | 
     sed ...) | ... 

有點複雜的管道現在,如果有一個混帳命令失敗,我想放棄我腳本提前。什麼是最好的方法來做到這一點?

回答

0

我只是將命令分成多行。如果git失敗,則無需啓動comm

trap 'rm -f tmp1 tmp2' EXIT 
git ... > tmp1 || exit 
git ... | sed ... > tmp2 || exit 
trap - EXIT 
comm -23 tmp1 tmp2 | ... 

trap電話是可選的,如果你想如果任git失敗的臨時文件刪除。

+0

嗯,我不想創建臨時文件。 '<()'重定向是否允許'comm'在輸出完成之前開始讀取輸出(因爲它只是傳遞一個文件描述符),還是'comm'只是等待整個輸出? (但是,真的,這只是理論,因爲我將git命令的輸出管理爲「排序」,這會緩衝所有的輸入。) – forivall

+0

臨時文件有什麼問題?只要有可用的東西,'comm'就可以開始讀取,但'sort'在'git'完成之前不會輸出任何東西。 – chepner