是否可以从命令中获取返回代码的更好方法。例如:
$ test $(ls -l) ||echo 'ok'
-bash: test: too many arguments
ok
上面的脚本在test命令中有错误,因为它似乎解析输出“ls -l”而不返回代码。
我知道使用“if”语法工作正常,但需要多行一行。
ls -l
if [ $? -eq 0 ];then
echo 'ok'
fi
答案 0 :(得分:2)
if
语句捕获命令的返回值,例如使用ls
:
if ls -l; then
echo 'ok'
fi
答案 1 :(得分:2)
您可以使用&&
和||
来使这些内容成为一行。例如,在以下内容中:
ls -l && echo ok
仅当echo ok
(&&
)之前的命令返回ls -l
时, 0
才会运行。
另一方面,在下面:
ls -l || echo 'not ok'
仅当echo 'not ok'
之前的命令返回非零时, ||
才会运行。
此外,您可以使用if..else
;
阻止单行播放
if ls -l;then echo ok;else echo 'not ok';fi
但这可能会使您的代码难以阅读,因此不建议使用。
答案 2 :(得分:0)
这里的另一个问题是如何在下面示例。
ls -l xxx || (echo "file xxx not exist" ; exit 1);echo "OK"
作为样本。如果文件 xxx 不存在。第二个 echo OK 以前仍然可以工作。
如果文件 xxx 不存在,我希望退出返回代码 1 。
答案 3 :(得分:-2)
而不是使用
test $(ls -l) ||echo 'ok'
你应该使用
[[ $(ls -l) ]] && echo "ok"
[[ ]]
是测试,如果命令成功返回(返回代码为零),则它会在&&
之后执行命令。
[[ ]]
test $( )
执行命令ls -l
命令运行&&
运行希望这有帮助!