bash中test -r命令触发‘cd: 参数过多’错误的原因咨询
为什么执行
source ~/.bashrc时出现"bash: cd: too many arguments"错误? 先给你澄清一个关键点:test -r ~/.dircolors这行代码绝对不会触发cd错误——它只是一个简单的文件可读性检查命令,和cd半毛钱关系都没有。
真正的问题藏在后面的eval执行逻辑里:当test检查通过(或不通过)时,会执行eval "$(dircolors -b ~/.dircolors)"或者eval "$(dircolors -b)",而dircolors命令的作用是生成一系列配置shell颜色的代码(比如定义LS_COLORS变量,甚至可能附带一些别名/函数)。如果这些生成的代码里存在错误的cd命令(比如某个别名不小心写成了alias cd='cd /path1 /path2'这种带多个参数的形式),当eval执行这段代码时,就会立刻触发"too many arguments"的错误。
给你几个排查方向:
- 先单独执行
dircolors -b ~/.dircolors(如果你的~/.dircolors文件存在),看看输出内容里有没有包含cd的错误代码;如果文件不存在,就执行dircolors -b检查系统默认输出的代码; - 可以先临时注释掉那整行
test ... || eval ...的代码,再执行source ~/.bashrc,如果错误消失,就能百分百确认是这行代码的问题; - 要是排查起来麻烦,干脆备份现有的
~/.dircolors(如果有的话),然后重新生成一个干净的版本:dircolors -p > ~/.dircolors,再重新source试试,看错误是否消失。
内容的提问来源于stack exchange,提问作者cbjuju
相关产品推荐
相关产品推荐

