'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开始,这是按优先级降序排列的列表:
- 别名
- Shell 函数
- Shell 内置命令
- 哈希表
- 路径变量
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
。
我的主目录中有一个名为 "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开始,这是按优先级降序排列的列表:
- 别名
- Shell 函数
- Shell 内置命令
- 哈希表
- 路径变量
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
。