causes the shell to exit if any subcommand or pipeline returns a non-zero status.
The answer the interviewer was probably looking for is:
It would be dangerous to use "set -e" when creating init.d scripts:
你写的每个脚本都应该在文件开头加上set -e
, 这句语句告诉bash如果任何语句的执行结果不是true
则应该退出. 这样的好处是防止错误像滚雪球般变大导致一个致命的错误, 而这些错误本应该在之前就被处理掉. 如果要增加可读性, 可以使用set -o errexit
, 它的作用与set -e
相同
To permanently disable shell command history
echo 'set +o history' >> ~/.bashrc
disable a command history system wide
# echo 'set +o history' >> /etc/profile
遇到执行错误,会抛出并终止
希望在执行错误之后立即退出, 不要再向下执行了. 而 -o pipefail
的作用域是管道, 也就是说在 Linux 脚本中的管道, 如果前面的命令执行出了问题, 应该立即退出
$ vim set_o_pipefail.sh $ cat set_o_pipefail.sh #!/bin/bash set -o pipefail ls ./a.txt |echo "hi" >/dev/null echo $? $ $ bash set_o_pipefail.sh ls: cannot access ./a.txt: No such file or directory 2 $ $ vim set_o_pipefail.sh $ cat set_o_pipefail.sh #!/bin/bash #set -o pipefail ls ./a.txt |echo "hi" >/dev/null echo $? $ $ bash set_o_pipefail.sh ls: cannot access ./a.txt: No such file or directory 0 $
抛出默认不存在的变量错误
永久指定输出调试信息
永久指定输出调试信息
记录操作历史