关闭。这个问题是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/