执行脚本之间的区别是什么
# ./test
和
# . ./test
test是简单的脚本,例如
#!/bin/bash
export OWNER_NAME="ANGEL 12"
export ALIAS="angelique"
我知道结果,但我不确定实际发生了什么
由于
答案 0 :(得分:7)
./foo
执行foo
如果它被标记为可执行并且具有正确的shebang行(或者是ELF二进制文件)。它将在一个新的过程中执行。
. ./foo
或. foo
在当前 shell中加载脚本。它等于source foo
使用示例代码,如果希望导出的变量在shell中可用,则需要使用第二种方式。
答案 1 :(得分:2)
单独使用dot,bash正在“获取”指定的文件。它等同于source
内置函数,并尝试在同一个shell进程中包含和执行脚本。
./
启动一个新进程,当前shell进程等待它终止。
答案 2 :(得分:0)
第一个意味着脚本(或二进制)是可执行的。使用包含shebang行的脚本(可能)告诉使用哪个解释器。
第二个是“执行[参数]作为shell脚本”的简写。作为参数传递的文件不需要设置可执行位。