![`cd` 的返回状态始终为 0](https://linux22.com/image/32577/%60cd%60%20%E7%9A%84%E8%BF%94%E5%9B%9E%E7%8A%B6%E6%80%81%E5%A7%8B%E7%BB%88%E4%B8%BA%200.png)
我正在执行以下命令。
cd dirname; echo $?
这总是返回0
cd 是否成功。这让我非常头疼。
如何在不读取错误消息的情况下检查 cd 是否成功。
答案1
原因可能是它cd
不是像平常那样内置的 shell,而是
- 一个外壳函数
- 或别名
这可以通过检查type cd
。
(我将评论作为答案,以便可以“关闭”问题。)
答案2
我的愚蠢!
按照 HaukeLaging 的建议,我做了type cd
。事实证明,它是某个 bash 函数的别名,该函数正在记录服务器上的cd
用户活动。cd
我别名cd
返回cd
,脚本开始正常工作。我有一种短暂的诱惑,想先完全删除这个问题,因为我想我应该在这里回答它。我可能对其他人有用。
答案3
一种解决方案是在调用前添加 bash 内置“命令”前缀。这将强制使用实际的二进制文件“cd”
root@ds002:~# command cd /foo
-bash: cd: /foo: No such file or directory
root@ds002:~# echo $?
1
答案4
这样的事情我也经历过。正如所有其他人提到的那样,这是因为我的“cd”被一个函数包裹着。
无论如何,这应该可行。
command cd /mnt/c/nowhere && echo y # does not console "y"