这会隐藏第一个命令的输出Oops
,如果失败则打印到 stderr。到目前为止,一切都很好。
#!/usr/bin/env bash
invalid_command > /dev/null 2>&1 || >&2 echo "Oops"
echo hi
输出如下:
Oops
hi
但是如果第一个命令失败,我需要退出并打印一条消息。所以我尝试使用括号。
#!/usr/bin/env bash
invalid_command > /dev/null 2>&1 || ( >&2 echo "Oops" ; exit )
echo hi
这是它的输出:
Oops
hi
但是现在exit
不起作用,因为它是在子shell中执行的,导致它 print hi
,即使我希望脚本退出。
echo
那么,如果特定命令使用操作符失败,我如何让 Bash 进入某些文本并退出||
?我知道我可以使用单线来做到这一点,但如果可以避免的话if
,我宁愿不必使用完整的声明。if
#!/usr/bin/env bash
if [ "$(invalid_command > /dev/null 2>&1 ; printf $?)" != "0" ]; then >&2 echo 'Oops' ; exit 1; fi
使用命令分组(注意
;
末尾的exit
)。在我的终端上返回这个。
如果您有很多命令,则可以捕获所有错误。
如果脚本上的任何命令失败,这将打印Oops并立即退出。