是否有更多使用终端(命令行)执行 Unix 二进制文件的方法?举echo
个例子:
$ /bin/echo "test"
test
$ cd /bin/
$ ./echo "test"
test
$ eval echo "test"
test
答案1
在 shell 命令行或 shell 脚本行中表达代码的方式有很多种,可以导致执行二进制文件。它们都归结为运行 shell 命令。如果命令引用文件,shell 将尝试运行文件。如果您有权执行该文件,则该尝试将会成功。该文件可能是二进制可执行文件或在第一行引用其解释器的脚本(以“#!”开头),或者文件可能只是纯数据(如文本)。如果此时它是可执行的,那么它将运行或被解释。 shell 有多种方式来表达命令。可能性是无限的。
答案2
请注意,正如斯帕霍克在评论中指出的那样,前两个示例的作用基本相同(它们使用程序的路径而不是进行路径查找来调用程序),并且遵循该逻辑,执行给定程序的方式实际上是无限的。
无论如何,我想说至少有 4 种不同的方法可以从 shell执行程序[1] :
Shell 内置函数:某些命令(例如
echo
Bash 中的命令本身)是在 shell 中实现的,因此不会调用相应的外部实用程序(如果存在)。$ echo foo foo
路径查找:当 shell 在环境变量中包含的每个目录中搜索所需的程序时
PATH
。$ cat <<< foo foo
直接调用:当使用其完整/相对路径调用程序时。
$ /bin/echo foo foo
$ ../../bin/echo foo foo
间接调用:当该程序被另一个程序(内置程序或外部程序)调用时。
$ eval echo foo foo
$ command echo foo foo
$ sh -c 'echo foo' foo
1.我知道你说过二进制文件。我使用了一个更通用的术语,因为脚本也可以从 shell 执行。