命令行 – 为什么“`命令不能用于`cd`?我也找不到`cd`的可执行文件!

我尝试了哪个CD,它没有给出路径,而是返回退出代码1(用echo $?检查). coreutil cd本身正在工作,所以可执行文件应该在那里,对吧?我也运行了一个cd的发现,但是没有显示可执行文件.那怎么实现呢?

更新:

我不知道我是否应该在另一篇文章中提出这个问题,但因为我觉得这里很好,我正在扩展(?)帖子……所以答案其实很简单,没有可执行文件 – 因为它是内置 – 但我发现一些内置(Fedora中的bash shell)有可执行文件!所以内置 – >我想,没有可执行文件是不对的?也许答案解释了内置实际上是什么(内置命令?),这实际上是这里的问题,而不是更多地关注CD …之前发布的一些好的链接表明内置不是程序……那么它们是什么?他们是如何工作的?它们只是shell的函数或线程吗?

最佳答案
命令cd不能是可执行文件

在shell中,cd用于“进入另一个目录”,或者更正式地用于更改curent工作目录(CWD).作为外部命令实现它是不可能的:

该目录属于进程

curent工作目录是用于解释相对路径以获取可用于访问文件的完整路径的目录.相对路径在许多地方使用,一个过程中的解释不应影响另一个过程.
因此,每个进程都有自己当前的工作目录.

cd是关于更改shell进程的当前工作目录,例如bash.

如果它是一个外部命令,路径中的可执行文件,运行该可执行文件将创建一个具有自己的工作目录的进程,而不会影响当前shell的进程.即使外部命令会改变它的目录,当外部进程退出时,该更改也会消失.

Shell内置命令

因此,为cd的任务运行外部命令是没有意义的.命令cd需要对当前运行的shell进程应用更改.

为此,它是shell的“内置命令”.

内置命令是与外部命令类似的命令,但是在shell中实现(因此cd不是coreutils的一部分).这允许命令改变shell本身的状态,在这种情况下调用chdir()看(见man 2 chdir);

关于哪个

现在,标题问题的答案很简单:
可执行命令无法告诉我们cd是内置命令,因为可执行命令对builtins一无所知.

替代类型-a

作为替代方案,您可以使用type -a;它可以看到可执行命令和内置函数;另外,它会看到别名和函数 – 也在shell中实现:

$type -a cd
cd is a shell builtin
$type -a type
type is a shell builtin
$type -a which
which is /usr/bin/which
which is /bin/which

转载注明原文:命令行 – 为什么“`命令不能用于`cd`?我也找不到`cd`的可执行文件! - 代码日志