2014-02-17 63 views
1

如果我做的:如何在命令替換失敗時使zsh在整行失敗?

$(blah) bleh 

我得到

zsh: command not found: blah 
zsh: command not found: bleh 

這有我有點擔心,因爲這意味着的zsh正在執行bleh這是從來沒有打算成爲一個命令;如果它恰好是可執行的並做了我不想要的事情呢?

blah失敗時,是否有辦法使整條線路失效?

回答

0

使用&&分隔命令將終止失敗:

$(blah) && bleh

+0

實際上,我並不想命令分開,但execu這是一個單一的命令。比如'$(echo cat)/ dev/null'。 – Owen

1

原因bleh受審是,$(blah)得到由一個空字符串替換如果blah不存在。在這種情況下,bleh將成爲完全解析的命令行中的第一個單詞,因此被用作命令解釋。

所以你必須捕捉空字符串,並阻止進一步執行。值得慶幸的是ZSH有一個參數擴展,即${name:?word}可以只是這種情況下使用:

${$(blah):?No such thing} bleh 

如果blah不存在,ZSH將打印No such thing並返回到提示(或退出shell,如果它是非-interactive):

zsh: : No such thing 

否則它只會取代命令

% alias blah="echo echo '>>>'" 
% ${$(blah):?No such thing} bleh 
>>> bleh