Linux/Ubuntu 设置:非法选项 -o pipefail

Linux/Ubuntu set: Illegal option -o pipefail

下面提到的代码行曾经在 Ubuntu 16.04 发行版上一直为我工作,但突然选项名称 pipefail 成为非法选项:

set -eu -o pipefail

returns:

set: Illegal option -o pipefail

为什么会这样?我 运行 在全新安装的系统上执行命令,并作为 shell 脚本的一部分。代码放在开头:

myscript.sh:

1 #!/bin/bash
2 set -eu -o pipefail
3 ...

脚本是 运行 作为 sudo:

sudo sh ./myscript.sh

你是运行宁bin/sh,在Ubuntu上它是一个符号link指向/bin/dash,但是pipefail是一个巴什主义。

使脚本可执行:

chmod +x myscript.sh

然后运行脚本如下:

sudo ./myscript.sh

当来自 zsh 的 运行 脚本和脚本以 incorrect shebang 开头时,我遇到了同样的错误。

错误,在 # 之后缺少 !

#/bin/bash
rest-of-the-script

正确:

#!/bin/bash
rest-of-the-script