-bash: /bin/cd: 没有这样的文件或目录 - cd后自动执行ls

-bash: /bin/cd: 没有这样的文件或目录 - cd后自动执行ls

我不小心毁掉了我的cd命令。

我尝试在调用ls后自动执行。cd

我发现一个帖子说我必须执行alias cd='/bin/cd && /bin/ls',但现在我得到-bash: /bin/cd: No such file or directory并且不能再更改目录了。

答案1

您的系统(像许多 Unix 系统一样)没有外部cd命令(至少在该路径上没有)。即使它有一个,也会ls为您提供原始目录的目录列表。外部命令永远无法更改调用进程(您的 shell)的目录1

从环境中删除别名unalias cd(并从您可能已将其添加到的任何 shell 初始化文件中删除其定义)。

使用 shell 函数,您可以让它像平常一样工作,如果成功,则在最后cd额外调用:lscd

cd () {
    command cd "$@" && ls -lah
}

或者,

cd () { command cd "$@" && ls -lah; }

这将使用cd您为函数提供的相同命令行参数来调用 shell 中内置的命令。如果目录更改成功,则将ls运行。

command命令阻止 shell 递归执行该函数。

函数定义(如上面所写)将进入 shell 的启动文件。有了bash,这或许就是~/.bashrc。然后函数定义将在下一个新的交互式 shell 会话。如果你想让它活跃现在,然后在交互式 shell 提示符下按原样执行函数定义,这将在当前交互式会话中定义它。


1在可用作外部命令的系统上cd,此命令也不会更改调用进程的目录。此类命令的唯一真正用途是提供 POSIX 合规性并充当测试是否将目录更改为特定目录将是可能的

答案2

我能够通过再次删除别名来解决它unalias cd

答案3

发生这种情况是因为:

$ type cd

cd is a shell builtin

相关内容