Answers:
以下命令相同,点组件表示“当前目录”。为了允许执行,文件需要具有可执行权限:
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脚本并执行它。
有关仅限于Shell脚本的答案,请参阅执行Shell脚本的不同方法。
感谢所有的投入。我现在将尝试回答我自己的问题,并提供有关执行脚本和二进制文件的各种可能性的完整指南。请编辑和评论,我们将提出完整且正确的内容。这是我的建议:
首先,有两点要说明:
Linux区分命令和路径。一个命令只类型为-上的提示,并且将执行一个内置的或将导致Linux的找相应的二进制或在$ PATH的脚本。
为了使Linux将某事物解释为路径,它需要至少包含一个斜杠(/)。例如./myScript
,./
中的似乎很多余-仅仅是为了使Linux将其解释为路径而不是命令。
因此,用于执行二进制文件或脚本的选项:
执行二进制文件binary
:
$ binary # when 'binary' is on the PATH, or is a built-in
$ ./binary # when 'binary' is not on the path but in the current directory
$ /home/me/binary # when 'binary' is not on the PATH, and not in the current dir
执行脚本script
:
除非另有说明,否则该文件将必须具有执行权限。
$ script # execute a script that is on PATH. Will be executed in a new shell.
# The interpreter to use is determined by the she-bang in the file.
$ ./script # execute a script that is in the current dir. Otherwise as above.
$ /a/dir/script # when the script is not on the PATH and not in current dir.
# Otherwise as above.
$ . script # execute a script in the current dir. Will be executed in the
# current shell environment.
$ source script # equivalent to the above *1
$ sh script # executes 'script' in a new shell *2 (the same goes for 'bash ...',
# 'zsh ...' etc.). Execute permission not neccessary.
关于她刘海:
#!/bin/sh
第一行带有she-bang的脚本(例如)告诉要使用的解释器。
./script
或者使用命令:script
(script
必须在PATH)sh script
在这种情况下,using 将忽略she-bang并使用sh
解释器. script
或source
将忽略she-bang并使用当前的解释器(因为.
或source
等效于仅在当前shell中执行脚本的每一行)脚注
* 1:这几乎是正确的。在bash中,它们的确是相同的命令,但使用时source
,script
将在$ dir 之前的当前目录中进行搜索。这是猛烈的打击,但是在仅POSIX的外壳中,source
它不起作用,但是.
可以。因此,最好将后者用于可移植性。
* 2:实际发生的是我们以'script'作为参数运行二进制sh,这将使'sh'在新的shell中执行'script'
这是命令的快速清单。注意,当我提到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
脚本也可以带有参数来运行。如Rute(p。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
scriptname
get_iplayer
二进制文件
vlc <stream url to open>
~/<folder>/app/myprog