测试后是否可以保持最后的命令退出状态($?
)不变?
例如,我想做:
command -p sudo ...
[ $? -ne 1 ] && exit $?
最后一个exit $?
应返回sudo退出状态,但始终返回0
(测试的退出代码)。
没有临时变量,是否可以这样做?
另一个示例进一步说明:
spd-say "$@"
[ $? -ne 127 ] && exit $?
在这种情况下,我只想找到第一个命令(退出代码!= 127
)就退出。而且我想用实际的spd-say
退出代码退出(可能不是
0
)。
编辑:我忘了提一下,我更喜欢POSIX投诉解决方案以获得更好的可移植性。
我在脚本中使用此结构,在脚本中我想为同一命令提供替代方法。例如,请参阅我的crc32脚本。
临时变量的问题在于它们可能会遮盖其他变量,并避免必须使用长名称,这不利于代码的可读性。
[ $? -ne 127 ] && exit $?
)
sudo
命令成功后sudo
退出(即,如果退出且状态为0)。但是,如果成功,脚本中的脚本将继续运行(不退出)sudo
command
而不是sudo
根本。那就是我想仅在找到第一个命令时退出(退出代码!= 127)的意思,这是找不到调用它的命令时的指定返回command
。我想问题在于,sudo
作为测试的一部分进行调用可以首先sudo
压缩的返回值command
,从而使测试倾斜。
if ! command -p sudo; then exit; fi
,您的示例将得到相同的结果。