在一个shell中,有什么区别?
. executable
和
./executable
在第一个中,点是source
正确的快捷方式?./executable
那么和之间有区别source executable
吗?
在一个shell中,有什么区别?
. executable
和
./executable
在第一个中,点是source
正确的快捷方式?./executable
那么和之间有区别source executable
吗?
./executable
运行当前工作目录中的可执行文件。(executable
如果.
你的 没有$PATH
,通常没有,那是不够的)。在这种情况下,executable
可以是一个 elf 二进制文件,或者一个以 开头的脚本#!/some/interpreter
,或者任何你可以的东西exec
(在 Linux 上它可能是一切,这要归功于binfmt
模块)。
. executable
将shell 脚本源到您当前的 shell 中,无论它是否具有执行权限。不会创建新进程。在bash
中,根据$PATH
变量搜索脚本。脚本可以设置环境变量,这些变量将在你的shell 中保持设置,定义函数和别名等等。
在第二个中,您给出路径:./
是当前工作目录,因此它不会搜索PATH
可执行文件,而是在当前目录中搜索。
source
将可执行文件作为参数并在当前进程中执行。
./executable 和 source 可执行文件之间有区别吗?
基本的区别是,
./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>