执行二进制文件的不同方法?

执行二进制文件的不同方法?

是否有更多使用终端(命令行)执行 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 内置函数:某些命令(例如echoBash 中的命令本身)是在 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 执行。

相关内容