在shell中,它们之间的区别是什么?
. executable和
./executable在第一个例子中,圆点是source的快捷方式,对吗?那么./executable和source executable之间有什么区别吗
发布于 2013-01-31 20:42:08
./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>发布于 2013-01-31 20:28:07
./executable运行位于当前工作目录中的可执行文件。(如果您的$PATH中没有.,那么使用executable是不够的,通常情况下也没有)。在这种情况下,executable可以是elf二进制文件,也可以是以#!/some/interpreter开头的脚本,也可以是任何可以exec的东西(在Linux上,由于有了binfmt模块,它可能就是一切)。
无论是否具有执行权限,. executable都会将一个shell脚本添加到当前shell中。不会创建任何新进程。在bash中,根据$PATH变量搜索脚本。脚本可以设置环境变量,这些变量将保留在shell中,还可以定义函数和别名等。
发布于 2013-01-31 20:20:33
在第二个文件中,您提供了路径:./是当前工作目录,因此它不会在PATH中搜索可执行文件,而是在当前目录中搜索。
source将可执行文件作为参数,并在当前进程中执行它。
https://stackoverflow.com/questions/14625580
复制相似问题