4

在一个shell中,有什么区别?

. executable

./executable

在第一个中,点是source正确的快捷方式?./executable那么和之间有区别source executable吗?

4

3 回答 3

7

./executable运行当前工作目录中的可执行文件。(executable如果.你的 没有$PATH,通常没有,那是不够的)。在这种情况下,executable可以是一个 elf 二进制文件,或者一个以 开头的脚本#!/some/interpreter,或者任何你可以的东西exec(在 Linux 上它可能是一切,这要归功于binfmt模块)。

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

于 2013-01-31T12:28:06.757 回答
0

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

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

于 2013-01-31T12:20:32.887 回答
0

./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>
于 2013-01-31T12:42:08.433 回答