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


13

我在$ HOME / bin中有一个文件(在您询问之前,是的,它在我的路径中)test,我已经确认可以在使用文件的完整路径运行该文件时执行该文件。但是,如果不这样运行,就会遇到一个非常奇怪的问题。当我只test在终端中运行时,它什么也不做,并立即返回。我知道,由于以下几个原因,这不是查找文件的问题:

  1. 没有错误信息。通常,如果找不到或无法执行该文件,则会显示一条消息,提示您。

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

  3. 可能是所有方法中最怪异的-运行脚本时,脚本工作正常strace。我尝试使用strace看看是否可以弄清楚发生了什么,但是当我使用进行运行时strace,它按预期运行了0个问题。


7
使用type,而不是which。请参阅为什么不使用“哪个”?那要用什么呢?
wjandrea

Answers:


45

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,因此如果该标准在中PATHstrace则将运行该标准。

在我的Bash上,which它也是一个外部命令,因此也没有关于内置命令的想法。另一方面,type命令内置在外壳程序中,并type test显示test is a shell builtin

另请参阅:为什么不使用“哪个”?那要用什么呢?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.