-bash: /bin/cd: 没有那个文件或目录 - cd 后自动执行 ls

Bla*_*ack 6 linux alias cd-command

我不小心破坏了我的cd命令。

我试图lscd被调用后自动执行。

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

Kus*_*nda 23

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

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

使用 shell 函数,您可以让它像cd往常一样工作,ls如果cd成功,则在末尾额外调用:

cd () {
    command cd "$@" && ls -lah
}
Run Code Online (Sandbox Code Playgroud)

或者,

cd () { command cd "$@" && ls -lah; }
Run Code Online (Sandbox Code Playgroud)

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

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

函数定义(如上文所述)将进入您的 shell 的启动文件。随着bash,这可能是~/.bashrc。然后,函数定义将在下一个新的交互式 shell 会话中处于活动状态。如果您希望它现在处于活动状态,则在交互式 shell 提示符下按原样执行函数定义,这将在您当前的交互式会话中定义它。


1cd可用作外部命令的系统上,此命令也不会更改调用进程的目录。对于这样的命令,唯一真正的用途是提供POSIX兼容并作为是否改变目录到一个特定的测试将是可能的


Bla*_*ack 7

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


Lin*_*eak 5

那是因为:

$ type cd

cd is a shell builtin
Run Code Online (Sandbox Code Playgroud)