# ./test
和
# . ./test
测试执行脚本之间的差异,例如
#!/bin/bash
export OWNER_NAME="ANGEL 12"
export ALIAS="angelique"
简单的脚本,我知道结果,但即时通讯不能确定到底发生了什么
谢谢
# ./test
和
# . ./test
测试执行脚本之间的差异,例如
#!/bin/bash
export OWNER_NAME="ANGEL 12"
export ALIAS="angelique"
简单的脚本,我知道结果,但即时通讯不能确定到底发生了什么
谢谢
./foo
执行foo
如果它被标记为可执行文件且具有合适的shebang行(或者是ELF二进制文件)。它将在一个新的过程中执行。
. ./foo
或. foo
加载在当前外壳脚本。它等于source foo
在示例代码中,如果希望导出的变量在shell中可用,则需要使用第二种方法。
为什么不在第一个场景中导出环境变量..?即时通讯仍然困惑.. – user1127747
@ user1127747:看到的问题[一个shell脚本可以设置调用shell的环境变量?](http://stackoverflow.com/questions/496702/can-a-shell-script-set-environment - 调用shell的变量)作为答案。 – DarkDust
@ user1127747:由于脚本在其自己的进程中运行,因此无法将*回*导出到其父环境。这不仅仅是环境变量的工作原理。通过源代码(孤立点),您可以保留在shell的进程中,因此可以自由地更改其环境。 – unwind
仅使用点,bash就是“采购”指定文件。它等同于内建的source
,并尝试在同一个shell进程中包含并执行脚本。
./
启动一个新进程,并且当前shell进程等待它终止。
'。/'表示*在当前目录*中。它是一个文件路径元素,而不是bash语法元素,不会产生子shell。 – DarkDust
@DarkDust:这可能是不准确的,我只是想概括一下调用脚本而不用源代码的情况。 –
第一个暗示脚本(或二进制)是可执行的。用脚本(可能)包含一个shebang行来告诉使用哪个解释器。
第二个是“执行[参数]作为shell脚本”的缩写。作为参数传递的文件不需要设置可执行位。
我不知道你可以做#。 ./blah。好的提示。 :) – vhallac
怎么样? '#'应该是一个评论,背后的一切都应该被忽略!除了文件开头的'#!'外。 – TMS