'which' 命令不正确

'which' command is incorrect

我的主目录中有一个名为 "echo" 的 shell 脚本。我将我的主目录添加到我的路径中,这样这个 echo 就会替换另一个。

为此,我使用了:export PATH=/home/me:$PATH

当我执行 which echo 时,它会显示我想要的那个。 /home/me/echo

但是当我真正做类似echo asdf的事情时,它使用了系统回显。

我是不是做错了什么?

可能使用了 shell 的内置函数。

如果你想要在你的道路上,你可以做

`which echo` asdf

this little article that explains the rules开始,这是按优先级降序排列的列表:

  1. 别名
  2. Shell 函数
  3. Shell 内置命令
  4. 哈希表
  5. 路径变量

echo 是一个 shell 内置命令(至少在 bash 中)并且 PATH 具有最低优先级。我想您需要创建一个函数或别名。

which 是一个外部命令,因此它无法访问您当前 shell 的内置命令、函数或别名。事实上,至少在我的系统上,/usr/bin/which 是一个 shell 脚本,因此您可以检查它并了解它是如何工作的。

如果您想知道 shell 将如何解释命令,请使用 type 而不是 which。如果您使用 bash,type -a 将按优先顺序打印所有可能的含义。有关详细信息,请参阅 shell 的文档。

对于大多数 shell,内置命令优先于 $PATH 中的命令。例如,内置 echo 的全部意义在于它比将 /bin/echo 加载到内存中更快。

如果您希望自己的 echo 命令覆盖 shell 的内置 echo,您可以将其定义为 shell 函数。

另一方面,覆盖内置的 echo 命令一开始并不是一个好主意。如果它的行为与内置 echo 相同,则没有太大意义。如果没有,那么它可能会破坏使用 echo 期望它以某种方式工作的脚本。如果可能的话,我建议以不同的方式给出命令。如果它是echo的增强版,你甚至可以称它为Echo