'其中'命令不正确

时间:2015-05-08 20:00:44

标签: sh preloading which

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

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

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

但是当我实际执行类似echo asdf的操作时,它会使用系统回显。

我做错了吗?

3 个答案:

答案 0 :(得分:1)

很可能使用了内置的shell。

如果您想要路径中的那个,那么

  

`echo`asdf

答案 1 :(得分:1)

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

  1. 别名
  2. Shell功能
  3. Shell内置命令
  4. 哈希表
  5. PATH变量
  6. 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