执行二进制文件和脚本的各种方式及其区别

执行二进制文件和脚本的各种方式及其区别

如果<script/binary>是脚本或可执行二进制文件,则可以使用以下哪个命令来执行它?如果有多种方式,它们有何不同?

$ <script/binary>
$ ./<script/binary>
$ sh <script/binary>
$ source <script/binary>
$ . <script/binary>

还有其他方法吗?

答案1

以下命令相同,点部分表示“当前目录”。要允许执行,文件需要具有可执行权限:

path/to/binary
./path/to/binary

请注意,如果路径不包含斜杠,则它将被视为命令(shell 内置命令或在$PATH环境变量中查找的程序)。

以下几乎相同,它们执行shell 脚本(不是二进制文件!)在当前 shell 环境中。这两行之间的细微差别在此进行了描述Unix.SE 问题

. path/to/script
source path/to/script

最后你提到sh script。同样,这只适用于shell 脚本而不是二进制文件。您基本上是以sh脚本名称作为参数来执行程序。在 的情况下sh,它只是将此参数视为 shell 脚本并执行它。

有关 shellscripts 的答案,请参见执行 Shell 脚本的不同方法

答案2

我将尽力回答我自己的问题。

正在执行:

$ file          # when 'file' is on the PATH, or is a built-in
$ ./file        # when 'file' is in the current directory
$ /home/me/file

file、二进制文件或脚本,必须设置执行权限。

script使用指定的 shell执行命令

$ sh script
$ bash script
$ zsh script

采购

$ . script
$ source script

答案3

以下是命令的快速列表。请注意,当我提到 PATH 时,我指的是包含系统知道的程序的目录;您可以使用 找到这些目录echo $PATH,它将类似于:/home/mike/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

脚本

  • 要在当前工作目录中执行脚本,请使用./myscript.sh
  • 要在另一个文件上执行脚本,请使用(如果它在当前工作目录中), ./myscript.sh textfile.txt
  • 脚本也可以带参数运行;如鲁特(第 68 页):myfile.sh dogs cats birds将会输出,The first argument is: dogs, second argument is: cats, third argument is: birds因为此脚本在 shebang 之后的内容是:echo "The first argument is: $1, second argument is: $2, third argument is: $3"

  • 要在另一个目录中执行脚本,请使用~/Scripts/dogs.sh

  • 要执行系统知道的脚本,因为它位于你的主目录中的 bin 文件夹中(如果不存在,只需创建它,因为它会自动添加到你的 PATH 中),只需使用scriptname
  • 要执行已安装的脚本,同样只需使用它的名称,因为系统会知道它:例如, get_iplayer

二进制文件

  • 要运行系统知道的二进制文件(因为它在 $PATH 中),请使用程序名称和任何参数,例如,vlc <stream url to open>
  • 要在安装到 /usr/local/bin 之前测试已编译的二进制文件,或者将独立程序保留在系统之外,请使用~/<folder>/app/myprog

相关内容