名为“test”的可执行文件位于 $PATH 中,但无法运行

名为“test”的可执行文件位于 $PATH 中,但无法运行

我在 $HOME/bin 中有一个文件(在你问之前,是的,它在我的路径中),test我已经确认当我使用文件的完整路径运行它时可以正常执行该文件。然而,当我不以这种方式运行时,我会遇到一个非常奇怪的问题。当我刚刚test在终端中运行时,它不会执行任何操作并立即返回。我知道这不是查找文件的问题,原因如下:

  1. 没有错误消息。通常,如果找不到文件或无法执行文件,则会打印一条消息来说明这一点。

  2. 运行which test仍然返回正确的文件路径。

  3. 可能是最奇怪的 - 脚本运行时运行良好strace。我尝试使用strace来查看是否可以弄清楚发生了什么,但是当我使用 运行它时strace,它按预期工作,出现了 0 个问题。

答案1

test这是一个不幸的名字,它是标准实用程序对于有条件的测试。 (它实际上与[in相同的命令if [ ... ],只是看起来就像语法一样,但实际上只是一个普通命令。)

testBash 也是内置的,因此运行时永远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,因此如果它是第一个PATHstrace则将运行该标准。

在我的 Bash 上,which它也是一个外部命令,因此它也不了解内置命令。另一方面,命令type是内置于 shell 中的,并且type test会显示test is a shell builtin.

也可以看看:为什么不用“哪个”呢?那该用什么呢?

相关内容