2017-03-15 14 views
1

傻这类问题的,但是......

如果一个命令失败,很轻松了,我可以退出:

command || exit $? 

如果我想干预的命令和出口之间的事情,我可以测试返回代码与0或只是退出子外壳:

command ; rc=$? 
echo That command returned $rc 
[ $rc -eq 0 ] || exit $rc 
# or 
(exit $rc) || exit $rc 

但我不喜欢测试与0,因为它使0 =真正显式。

尽管我喜欢(退出$ rc),因为它避免了明确的0,但子shell看起来很重,并且使用两次退出似乎是多余的。

有没有更好的选择?

+0

在你试图退出salme方式,你可以使用bash函数返回它的输入,不是吗? –

+0

@LaurentG我可以,但是我不得不定义这个,所以它不会是一个简单的一行。 –

+0

它取决于行长...有一些大括号和分号.../o \ –

回答

0

不quiiiite什么,我脑子里想的,但足够接近我,因为我一般只在乎失败:

$ bash 
bash-3.2$ false || exit $? $(echo worbly boo $? > /dev/tty) 
worbly boo 1 
exit 

它捷径的$()方便,除了在错误情况下,所以没有子shell。

它还处理$()内的故障很优雅:

bash-3.2$ false || exit $? $((foo ; echo $?) > /dev/tty) 
bash: foo: command not found 
127 
exit 
0

定义一个函数来处理失败的情况下:

fail() { 
    echo failed with code $1; 
    exit $1; 
} 
true || fail $?   # does nothing 
false || fail $?   # outputs failed... and exits