繁体   English   中英

“。有什么区别? Linux bash shell中的“文件”和“ ./file”?

[英]What is the difference between “. file” and “./file” in Linux bash shell?

当“文件”是可执行文件时,两者之间有什么区别

$ ./file

$ . file

在Linux bash shell中?

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

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

./这里只是说文件在当前目录中。 cd /bin ; ./ls 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 cd /bin ; ./ls将执行ls程序; 但是cd /bin ; . ls cd /bin ; . ls cd /bin ; . ls将失败并显示错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM