我在 $HOME/bin 中有一个文件(在你问之前,是的,它在我的路径中),test
我已经确认当我使用文件的完整路径运行它时可以正常执行该文件。然而,当我不以这种方式运行时,我会遇到一个非常奇怪的问题。当我刚刚test
在终端中运行时,它不会执行任何操作并立即返回。我知道这不是查找文件的问题,原因如下:
没有错误消息。通常,如果找不到文件或无法执行文件,则会打印一条消息来说明这一点。
运行
which test
仍然返回正确的文件路径。可能是最奇怪的 - 脚本运行时运行良好
strace
。我尝试使用strace
来查看是否可以弄清楚发生了什么,但是当我使用 运行它时strace
,它按预期工作,出现了 0 个问题。
答案1
test
这是一个不幸的名字,它是标准实用程序对于有条件的测试。 (它实际上与[
in相同的命令if [ ... ]
,只是看起来就像语法一样,但实际上只是一个普通命令。)
test
Bash 也是内置的,因此运行时永远test
不会从路径中查找二进制文件。
bash$ help test | head
test: test [expr]
Evaluate conditional expression.
Exits with a status of 0 (true) or 1 (false) depending on
the evaluation of EXPR. Expressions may be unary or binary.
[...]
test
不带参数只返回 1 (false)。
运行strace test
不涉及内置的 shell,因为strace
它本身不实现任何实用程序。它只是使用它在您的PATH
.请注意,您可能test
在/bin/test
或中有标准/usr/bin/test
,因此如果它是第一个PATH
,strace
则将运行该标准。
在我的 Bash 上,which
它也是一个外部命令,因此它也不了解内置命令。另一方面,命令type
是内置于 shell 中的,并且type test
会显示test is a shell builtin
.
也可以看看:为什么不用“哪个”呢?那该用什么呢?