Con*_*nda 13 bash path executable shell-script strace
我在 $HOME/bin 中有一个文件(在你问之前,是的,它在我的路径中)test
我已经确认当我使用文件的完整路径运行它时可以正常执行。但是,当我不以这种方式运行时,我会遇到一个非常奇怪的问题。当我test
在终端中运行时,它什么也不做并立即返回。我知道这不是查找文件的问题,原因如下:
没有错误信息。通常,如果找不到文件或无法执行文件,则会打印出一条消息。
运行which test
仍然返回正确的文件路径。
可能是最奇怪的 - 脚本在运行时运行良好strace
。我试着用strace
看看我是否能弄清楚发生了什么,但是当我用 运行它时strace
,它按预期工作,有 0 个问题。
ilk*_*chu 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.
[...]
Run Code Online (Sandbox Code Playgroud)
test
没有参数只返回 1 (false)。
运行strace test
不涉及内置的 shell,因为strace
它本身不实现任何实用程序。它只是使用它在您的PATH
. 请注意,您可能test
在/bin/test
or 中有标准/usr/bin/test
,因此如果它是第一个 in PATH
,strace
则会运行 run 。
在我的 Bash 上,which
也是一个外部命令,所以它也不知道内置命令。另一方面,该type
命令内置于 shell 中,并且type test
会显示test is a shell builtin
.
另请参阅:为什么不使用“which”?那用什么?