Solaris sh与RedHat bash中cd失败行为差异及相关技术疑问
Solaris sh 与 RedHat bash 命令执行行为差异解答
1. Solaris sh 中执行失败会终止后续操作的命令
在 Solaris 的 Bourne shell(sh)里,只有内置命令 cd 执行失败时会直接触发 shell 退出,导致后续命令无法执行。
其他无论是内置命令(比如 echo、pwd)还是外部命令(比如 cp、ls、rm),即便执行出错返回非零状态码,shell 都会继续执行后续命令,不会终止。
2. sh 与 bash 对 cd 失败处理不同的原因
这是不同 shell 实现的设计差异:
- Solaris 的
sh作为传统 Bourne shell,将cd执行失败认定为严重错误,默认会直接退出 shell 进程,这是该 shell 实现的特有逻辑。 - bash 是 Bourne shell 的增强版本,设计更侧重灵活性,
cd执行失败只会返回非零退出码,不会终止 shell,方便用户或脚本通过条件判断(比如if cd /targetdir; then ...)自行处理失败情况。
POSIX 标准仅规定了 cd 命令的退出码规则,并未强制要求 shell 在 cd 失败时退出,因此不同 shell 可根据自身设计做出不同处理——这也是你查阅 cd 手册找不到相关说明的原因,该行为属于 shell 本身的逻辑,而非 cd 命令的标准定义。
内容的提问来源于stack exchange,提问作者kldd
相关产品推荐
相关产品推荐

