在unix命令行中,通过简单地键入名称来执行程序与通过键入a来执行程序之间的区别是什么.(点)后跟程序名称?例如:
runme
Run Code Online (Sandbox Code Playgroud)
与
. runme
Run Code Online (Sandbox Code Playgroud)
Joh*_*itb 25
. name
将调用的文件发送name
到当前shell.所以如果一个文件包含这个
A=hello
Run Code Online (Sandbox Code Playgroud)
然后,如果你来源,事后你可以参考一个叫可变A
其中将包含打招呼.但是如果你执行文件(给定正确的执行权限和#!/interpreter
行),那么这些东西将无法工作,因为脚本集的变量和其他东西只会影响它运行的子shell.
获取二进制文件没有任何意义:Shell不会知道如何解释二进制文件(记住它会将出现在该文件中的内容插入到当前shell中 - 就像#include <file>
C中的旧机制一样).例:
head -c 10 /dev/urandom > foo.sh; . foo.sh # don't do this at home!
bash: ??D$?/?: file or directory not found
Run Code Online (Sandbox Code Playgroud)
但是,执行二进制文件确实很有意义.所以通常你只想命名你想要执行的文件,在特殊情况下,就像A=hello
上面的情况一样,你想要一个文件来源.
dmc*_*kee 16
使用" source
"或" .
"会导致命令在当前进程中运行.将脚本作为可执行文件运行会为其提供自己的进程.
如果您尝试在当前shell中设置环境变量(在单独的进程中无法执行)或者想要在不中止shell的情况下中止脚本(这只能在单独的进程中执行),这一点最为重要.