bash - Bash 在执行脚本时忽略错误的理由是什么?

标签 bash error-handling

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

6年前关闭。




Improve this question




Bash - 可能还有其他 shell - 默认情况下会忽略任何错误并继续执行下一个命令。我想知道为什么外壳是这样设计的。毕竟,通常情况下,人们会想要中止一个脚本,其中每个命令都需要前一个命令生成的状态。

最佳答案

我不知道确切的原因,例如:
每张支票都需要额外的时间。为了获得更好的性能,无需每次都进行额外检查,也不会弹出“您确定 [Yes] [No] [Ignore]”。

你害怕像这样的代码

cd /
ls
cd $HOME/temp;
rm -rf *

当您没有临时目录(由普通用户制作并由 root 执行的脚本)时会很糟糕!

任何拥有 root 访问权限的人都必须意识到他所承担的责任和危险。这就是为什么你不应该执行你不信任的脚本(在你的 PATH 中没有当前目录)。写那个剧本的人也是错的。不检查 $?脚本应该改成类似
cd / && ls
cd "${HOME}"/temp && rm -rf *

或者
cd / && ls
if [ ${#HOME} -gt 1 ]; then
   rm -rf /"${HOME}"/temp/*
fi

这些例子不是证明退出错误会更好吗?我不这么认为。当 Unix 因错误退出而失败并且您没有检查所有内容时,事情可能会变得非常糟糕
cd /
ls
rm -rf /$HOME/temp/*

当 HOME 设置为/或带有空格的字符串(以空格结尾..)时,最后一个命令可能会起作用。总是三重检查你的脚本,你正在使用权力。

关于bash - Bash 在执行脚本时忽略错误的理由是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33963027/

相关文章:

powershell - 如何将命令行参数设置为整​​数,但是如果给定非数字值,请再次询问?

error-handling - Julia : How to copy an error message from Juno in Atom?

regex - grepping shell脚本中包含特殊字符的变量

由于执行新的应用程序,Python 操作系统命令无法正常工作

zend-framework - Zend 错误 Controller 停止工作 500

ruby-on-rails-3 - Rails : Change displayed error column names

c++ - 如何防止插件崩溃影响主程序 (dlopen)

linux - 记录控制台的所有输出

linux - 使用等号作为分隔符对文本进行制表

regex - linux查找正则表达式