gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:50:04 26 4
gpt4 key购买 nike

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

$ ./file

$ . file

在 Linux bash shell 中?

最佳答案

.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 将因错误而失败。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com