首页 > 解决方案 > 为什么`which pushd`不返回任何东西?

问题描述

我的理解是,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)

pushd已“安装”并正常工作。这挑战了我对 linux 命令的整体理解。

有人可以解释为什么会这样吗?

标签: 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-Builtin-Commands 。


推荐阅读