从“which”返回的“//”是什么意思

从“which”返回的“//”是什么意思

test我在完整路径下有一个可执行脚本/home/sawa/foo/bar/test。该目录/home/sawa/foo/bar位于 内$PATH,并且优先于默认目录,包括/usr/bin.当我做

`which test`

查看该命令是否被正确识别,它返回

/home/sawa/foo/bar//test

用双斜杠//.我知道有一个同名的内置命令test,当我删除我的命令时,下面的这个命令/usr/bin/test由 返回which,所以我认为它在某种程度上造成了干扰。

  1. 这个双斜杠在这里意味着什么,为什么它出现在这里?
  2. 我的可执行文件test似乎无法正常工作。这是为什么?

答案1

我猜你/home/sawa/foo/bar/的路径上有 - 即带有尾部斜杠的路径。

which正在迭代每个元素$PATH并附加/argv[1]并检查该文件是否存在。这会导致双斜杠 - 一个来自$PATH部分,一个来自/argv[1]

A双斜杠没问题。它被内核折叠成一个斜线。只有在路径的开头,双斜杠才可能具有特殊含义,但并非总是如此。

至于test不工作,请确保您在调用时没有使用内置的 shell test。您通常使用完整路径来执行此操作,但使用 bash,您也可以使用它enable -n test来禁用内置test命令。

答案2

它很可能不适合您,因为 shell 内置命令的执行优先级高于任何可执行文件。你不应该故意制造这样的名称冲突行为将要在不同环境中不一致。系统二进制文件test仅供没有内置版本的 shell 使用。

如果您想要替代功能,您应该将脚本命名为其他名称。

相关内容