问题描述:
shell下运行脚本时,报错如下:
scripts/run-kitti-example.sh: 24: set: Illegal option -o pipefail
xx@ubuntu-178:~/workspace/avs/xviz$ sh scripts/run-kitti-example.sh
starting...
scripts/run-kitti-example.sh: 24: set: Illegal option -o pipefail
xx@ubuntu-178: ~/workspace/avs/xviz$
原因分析:
set -o pipefail这个命令通常用作:脚本有一连串动作需要执行,一旦某一环节出错,
如果设定了pipefail,脚本会立即中断运行;
如果没有设定,脚本将继续执行后续命令,可能造成错误。
当使用pipefail一直报错,需要确认默认使用的是哪个版本的shell,bash还是dash?
使用如下命令查看:
ls -al /bin/sh
通常使用的是bash,但是如果有一些命令无法正常执行,可能是使用dash的原因。
解决方案:
使用如下命令将shell切换至bash,如此将重新配置dash,使其不作为默认shell
##方法一
// step 1:
sudo dpkg-reconfigure dash
// step 2:
选择no或否,并确认
##方法二
// 将shell指向bash
sudo ln -fs /bin/bash /bin/sh
扩展:
set -e:表示一旦脚本中有命令的返回值为非0,则脚本立即退出,后续命令不再执行;
set -o pipefail:表示在管道连接的命令序列中,只有有任何一个命令返回非0,则整个管道返回非0值,即使最后一个命令返回0。