linux - Linux bash shell 中的 ". file"和 "./file"有什么区别?

标签 linux bash

当"file"可执行时,有什么区别

$ ./file

$ . file

在 Linux bash shell 中?

最佳答案

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

./file只是给出文件的路径;在这种情况下,文件将根据文件的类型或文本文件的哈希值作为子进程启动。如果文件的第一行是 #!/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将因错误而失败。

关于linux - Linux bash shell 中的 ". file"和 "./file"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41712148/

相关文章:

linux - 关于linux中的环境变量和init

linux - 使用 linux 命令删除和替换一行

Ruby - Watir - PhantomJS

linux - Linux 内核中 UD2 操作码的用途是什么?

R:使用并行写入磁盘

bash - bash 的字符串长度

linux - ubuntu/bash下递归重命名文件和目录

linux - linux中文件的原子读取和截断

linux - 在 Bash 中执行 TAR 失败

linux - 从在另一个脚本中运行的脚本中获取输出