./executable和。之间的区别。可执行

时间:2013-01-31 12:15:20

标签: linux bash shell executable

在shell中,有什么区别?

. executable

./executable

在第一个中,点是source的快捷方式吗?那么./executablesource executable之间是否存在差异?

3 个答案:

答案 0 :(得分:6)

./executable运行当前工作目录中的可执行文件。如果您的executable中没有.,并且通常没有$PATH,则executable是不够的。在这种情况下,#!/some/interpreter可以是elf二进制文件,也可以是以exec开头的脚本,或者是binfmt的任何内容(在Linux上它可能所有内容,谢谢到. executable模块)。

bash shell脚本发送到您当前的shell中,无论它是否具有执行权限。没有创建新进程。在$PATH中,根据{{1}}变量搜索脚本。脚本可以设置环境变量,这些变量将保留在你的 shell中,定义函数和别名等等。

答案 1 :(得分:0)

在第二个中,您给出了路径:./是当前工作目录,因此它不会在PATH中搜索可执行文件,而是在当前目录中搜索。

source将可执行文件作为参数并在当前进程中执行。

答案 2 :(得分:0)

  

./executable和源可执行文件之间有区别吗?

基本区别在于,

./foo.sh      - foo.sh will be executed in a sub-shell
source foo.sh - foo.sh will be executed in current shell

一些例子可以帮助解释差异:

假设我们有foo.sh

#!/bin/bash
VAR=100

来源:

$ source foo.sh 
$ echo $VAR
100

如果你:

./foo.sh
$ echo $VAR
[empty]

另一个例子,bar.sh

#!/bin/bash
echo "hello!"
exit 0

如果你执行它:

$ ./bar.sh
hello
$

但如果您采购它:

$ source bar.sh
<your terminal exits, because it was executed with current shell>