OSX Bash中cd命令传入整数为何跳转至$HOME目录?
问题根源:你的
cd被脚本改写了! 这事儿一看set -x的输出就清楚了——你Shell里的scmb_expand_args脚本在处理cd命令时,把纯数字的参数给“吞”成空字符串了,导致实际执行的是不带参数的cd,而不带参数的cd默认就是跳转到$HOME目录。
从调试输出拆解关键过程
咱们对着你贴的set -x日志一步步看:
- 当你执行
cd 123时,脚本进入scmb_expand_args函数,它会检查每个参数的格式,发现123匹配了^[0-9]{0,4}$(纯数字)的规则; - 接着脚本执行
[ -e 123 ],检查当前目录下是否存在名为123的文件/目录——因为你的foo目录是空的,这个判断结果是假; - 然后调用
_print_path '' e123,这个函数返回了空字符串; - 最后脚本通过
eval执行的命令变成了builtin cd(注意后面是空的),不带参数的cd自然就跳回你的$HOME了!
解决办法
这里给你几个实用的方案:
- 临时绕过:如果要进入(或尝试进入)名为
0/123的目录,用相对路径前缀./,比如cd ./0。这样脚本不会把./0识别为纯数字,会正常执行cd命令,目录不存在时就会弹出错误提示; - 修复脚本逻辑:找到
scmb_expand_args所在的status_shortcuts.sh文件,修改处理纯数字参数的代码——比如加个判断:如果纯数字参数对应的路径不存在,就保留原参数,不要替换为空; - 暂时禁用脚本:如果这个脚本是某个Shell配置(比如自定义prompt、第三方插件)带来的,你可以在
.bashrc里注释掉加载它的行,测试一下是否恢复正常的cd行为。
内容的提问来源于stack exchange,提问作者shime
相关产品推荐
相关产品推荐

