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

Lan*_*uhn 20 unix shell

在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的情况下中止脚本(这只能在单独的进程中执行),这一点最为重要.


Mr.*_* 安宇 5

第一个执行命令.第二个是将shell脚本包含在另一个内容中的简写.