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
,所以我认为它在某种程度上造成了干扰。
- 这个双斜杠在这里意味着什么,为什么它出现在这里?
- 我的可执行文件
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 使用。
如果您想要替代功能,您应该将脚本命名为其他名称。