执行二进制文件和脚本的不同方式

Car*_*arl 12 bash xterm

我已经使用 Linux 有一段时间了,我一直在寻找有关此内容的完整概述,但没有找到。

我只是不接受执行脚本和二进制文件的所有不同方式 - 这对我来说都是一团糟,我必须使用反复试验来确定我应该使用什么。对于脚本或二进制文件<script/binary>,我可以提出以下替代方案:

<script/binary>
. <script/binary>
./<script/binary>
source <script/binary>
sh <script/binary>
Run Code Online (Sandbox Code Playgroud)

(还有吗?)

有人可以完整概述哪些命令适用于哪些类型的文件,以及有多个选项时的区别是什么?

谢谢。

Lek*_*eyn 8

下面的命令是一样的,一个点组件表示“当前目录”。为了允许被执行,文件需要具有可执行权限:

path/to/binary
./path/to/binary
Run Code Online (Sandbox Code Playgroud)

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

以下几乎相同,它们在当前 shell 环境中执行一个shell 脚本(不是二进制文件!)。在这个Unix.SE question中描述了两行之间的一个小区别。

. path/to/script
source path/to/script
Run Code Online (Sandbox Code Playgroud)

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

有关仅限于 shellscripts 的答案,请参阅执行 shell 脚本的不同方式


Car*_*arl 6

我会尝试回答我自己的问题。

执行:

$ file          # when 'file' is on the PATH, or is a built-in
$ ./file        # when 'file' is in the current directory
$ /home/me/file
Run Code Online (Sandbox Code Playgroud)

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

script使用指定的shell执行命令

$ sh script
$ bash script
$ zsh script
Run Code Online (Sandbox Code Playgroud)

采购

$ . script
$ source script
Run Code Online (Sandbox Code Playgroud)