我不小心毁掉了我的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
额外调用:ls
cd
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