在shell中,有什么区别?
. executable
和
./executable
在第一个中,点是source
的快捷方式吗?那么./executable
和source executable
之间是否存在差异?
答案 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>