unix命令行执行。 (点)与没有

时间:2009-05-28 19:09:13

标签: unix shell

在unix命令行中,通过简单地键入名称来执行程序与通过键入a来执行程序之间的区别是什么。 (点)后跟程序名称? e.g:

runme

VS

. runme

5 个答案:

答案 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脚本上的二进制文件。