"之间有什么区别?文件"和" ./ file"在Linux bash shell中?

时间:2017-01-18 05:41:07

标签: linux bash

当' file'是可执行的,

之间有什么区别
kill 29871 ;

$ ./file
在Linux bash shell中

1 个答案:

答案 0 :(得分:3)

.source的别名:它将在当前bash进程中执行作为其参数的文件,就像您直接在命令行中输入文件一样。

./file只是提供文件的路径;在这种情况下,文件将根据文件的类型作为子进程启动,或者在文本文件的情况下作为hashbang启动。如果文件的第一行是#!/bin/bash,它将作为新的bash进程启动它。

./这里只是说文件在当前目录中。说cd /bin ; ./ls/bin/ls没什么不同(显然我们将当前目录改为一个而不是另一个)。我们必须指定当前目录并且不能简单地给出文件名的原因是,如果没有指定目录,bash只在PATH中查找要执行的程序,并且当前目录通常不在类似Unix的PATH中系统。由于/bin位于PATH中,因此简单ls(通常)等同于/bin/ls

如果要定义变量,差异非常明显。任何环境变量仅适用于当前进程及其子进程;因此,如果在子进程中定义环境变量,则调用进程将无法访问它。

例如,假设您有一个名为testvar.sh的文件:

#!/bin/bash

what=world

如果这样做,您将不会设置变量:

./testvar.sh ; echo Hello, $what
# => Hello, 

但如果你这样做,你会:

. testvar.sh ; echo Hello, $what
# => Hello, world

另一个明显的区别是,由于.执行bash命令,它只适用于包含bash脚本的文件。因此,cd /bin ; ./ls将执行ls程序;但是cd /bin ; . ls会因错误而失败。