我是shell的前端,目前我写了一个小脚本,我遇到了一个没有任何错误的问题:/
此代码总是退出我的脚本,我不明白为什么:
[[ -x $PATH ]] || log_failure_msg "Binary file not found or not executable!"; exit 0
当$ PATH有效时,我什么都没有,如果路径错了,我收到了失败的消息。
如果我删除log_failure_msg "Binary file not found or not executable!";
脚本完美地工作-_-
如果没有if / fi条件,我能解决这个问题吗?
感谢您的帮助!
答案 0 :(得分:3)
问题是优先事项,正如phlogratos所解释的那样。但是,你不能使用括号,因为它们会产生一个子shell,你将退出那个 shell。对于这个特殊问题,存在花括号。它们具有几乎相同的语义,但它们在当前 shell中生成作业。
$ cat a.sh
[[ -f file ]] || { echo error; exit 0; }
echo "ok"
$ touch file
$ ./a.sh
ok
$ rm file
$ ./a.sh
error
$
答案 1 :(得分:-1)
[[ -x $PATH ]] || log_failure_msg "Binary file not found or not executable!"; exit 0
相当于
{ [[ -x $PATH ]] || log_failure_msg "Binary file not found or not executable!" } ; exit 0
您需要的是
[[ -x $PATH ]] || { log_failure_msg "Binary file not found or not executable!"; exit 0 }
我假设你正在使用bash。 bash手册页说明:
..., && and || have equal precedence, followed by ; and &, which have equal precedence.