[英]what is the difference between something and `something` in the linux shell?
[英]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.