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
下面提到的代码行曾经在 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