为什么bash脚本在“ [:==:期望一元运算符时”不立即保留代码

时间:2019-09-26 05:15:01

标签: bash

有什么办法让bash脚本出错并在遇到[: ==: unary operator expected错误时返回非零退出代码吗?

我已经在线搜索并尝试添加set -euxo pipefail,但是这些方法都无法按预期工作。 (在macOS和Linux上测试)。

$ ./a.sh
./a.sh: line 4: [: ==: unary operator expected
barfoo
$ echo $?
0
#!/bin/bash
set -euo pipefail
if [  == "foo" ];
then
  echo "foobar"
  exit 1
fi
echo "barfoo"

Bash打印[: ==: unary operator expected并继续执行其余代码,最后返回0。我已经知道如何解决“期望的一元运算符”问题,只是很好奇我应该怎么做才能使脚本立即以非零代码离开。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您必须看到Bash脚本作为终端。如果您打开终端并输入错误的命令,例如chmox -x <file>,则终端不会退出,而是显示警告并保持打开状态,以便您继续工作。

让Bash从文件执行它,而不是键入很多命令。