![执行二进制文件和脚本的各种方式及其区别](https://linux22.com/image/821331/%E6%89%A7%E8%A1%8C%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%E5%92%8C%E8%84%9A%E6%9C%AC%E7%9A%84%E5%90%84%E7%A7%8D%E6%96%B9%E5%BC%8F%E5%8F%8A%E5%85%B6%E5%8C%BA%E5%88%AB.png)
如果<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