我的主目录中有一个名为" echo"的shell脚本。我将我的主目录添加到我的路径中,这样这个echo就会替换另一个。
为此,我使用了:export PATH=/home/me:$PATH
当我which echo
时,它会显示我想要的那个。 /home/me/echo
但是当我实际执行类似echo asdf
的操作时,它会使用系统回显。
我做错了吗?
答案 0 :(得分:1)
很可能使用了内置的shell。
如果您想要路径中的那个,那么
`echo`asdf
答案 1 :(得分:1)
从this little article that explains the rules开始,这是一个按优先级降序排列的列表:
echo
是一个shell内置命令(至少在bash中),PATH
具有最低优先级。我想你需要创建一个函数或别名。
答案 2 :(得分:1)
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
。