我的理解是,linux中的所有命令都必须存在于$PATH
上,即使是最基本的命令
> which cd
/bin/cd
> which ls
/bin/ls
但当我尝试which pushd
时,令我惊讶的是,它回来了:
/usr/bin/which: no pushd in (/bin:/usr/share/maven/bin:/usr/share/java/jdk1.8.0_131/bin:/usr/local/bin:/usr/bin:/usr/local/sbin)
CCD_ 3是";已安装";和工作。这挑战了我对linux命令的全部理解。
有人能解释为什么会发生这种情况吗?
有人能解释为什么会发生这种情况吗?
pushd
和许多其他命令一样,是一个内置命令。which
本身就是一个可执行文件,which
搜索可执行文件——没有pushd
这样的可执行文件。
要影响shell本身的当前工作目录,它必须是一个内置目录,就像cd
一样。
你可以用type
:检查它是什么
$ type pushd
pushd is a shell builtin
此类shell内置程序的其他示例有哪些?
它们在文档中列出:https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-内置命令。