'//' 从 `which` 返回是什么意思

saw*_*awa 4 shell slash path which

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

`which test`
Run Code Online (Sandbox Code Playgroud)

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

/home/sawa/foo/bar//test
Run Code Online (Sandbox Code Playgroud)

用双斜线//。我知道有一个同名的内置命令test,当我删除我的命令时,下面的这个命令/usr/bin/test是由 返回的which,所以我认为它以某种方式进行了干扰。

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

cam*_*amh 7

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

which迭代每个元素$PATH并附加/argv[1]和检查该文件的存在。这会导致双斜线 - 一个来自$PATH零件,一个来自/argv[1].

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

至于test不起作用,请确保在调用test. 您通常使用完整路径来执行此操作,但您也可以使用 bashenable -n test来禁用内置test命令。