在unix命令行中,通过简单地键入名称来执行程序与通过键入a来执行程序之间的区别是什么。 (点)后跟程序名称? e.g:
runme
VS
. runme
答案 0 :(得分:24)
. name
将名为name
的文件导入当前shell。因此,如果文件包含此
A=hello
然后,如果您获得该信息,那么之后您可以引用名为A
的变量,该变量将包含 hello 。但是如果你执行文件(给定正确的执行权限和#!/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
然而,执行二进制文件确实很有意义。因此,通常您只想命名要执行的文件,在特殊情况下,例如上面的A=hello
情况,您希望获取文件。
答案 1 :(得分:16)
使用“source
”或“.
”会导致命令在当前进程中运行。将脚本作为可执行文件运行会为其提供自己的进程。
如果您尝试在当前shell中设置环境变量(在单独的进程中无法执行)或想要在不中止shell的情况下中止脚本(您只能 单独进行)。
答案 2 :(得分:5)
第一个执行命令。第二个是将shell脚本包含在另一个内容中的简写。
答案 3 :(得分:4)
此语法用于“加载”和解析脚本。当你拥有一个与其他一些脚本具有共同功能的脚本时,它是最有用的,你可以“点”包含它。有关详细信息,请参阅http://tldp.org/LDP/abs/html/internal.html(向下滚动到“dot”命令)。
答案 4 :(得分:4)
运行“runme”将创建一个新的进程,它将以愉快的方式进行,不会影响你的shell。
运行“.runme”将允许脚本“runme”更改环境变量,更改目录以及您可能希望它为您执行的各种其他操作。它只能这样做,因为它正在由已经为你运行的shell进程解释。因此,如果您将bash作为登录shell运行,则只能使用“。”。使用bash脚本的符号,而不是(例如)C shell脚本上的二进制文件。