当"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/