![在 bash 脚本中,一个点后跟一个空格再跟一个路径是什么意思?](https://linux22.com/image/829302/%E5%9C%A8%20bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%EF%BC%8C%E4%B8%80%E4%B8%AA%E7%82%B9%E5%90%8E%E8%B7%9F%E4%B8%80%E4%B8%AA%E7%A9%BA%E6%A0%BC%E5%86%8D%E8%B7%9F%E4%B8%80%E4%B8%AA%E8%B7%AF%E5%BE%84%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%9F.png)
我在尝试在 openvz 容器内挂载 USB 设备时遇到了这个示例,我以前从未见过第二行中的构造。你能解释一下它代表什么吗?
#!/bin/bash
. /etc/vz/vz.conf
答案1
它是内置的同义词source
。它将在当前 shell 中执行文件中的命令,如从help source
或读出help .
。
在您的情况下,文件/etc/vz/vz.conf
将被执行(很可能,它仅包含稍后将在脚本中使用的变量赋值)。它与仅使用 执行文件有/etc/vz/vz.conf
诸多不同:最明显的是该文件不需要可执行;然后您会考虑使用 运行它,bash /etc/vz/vz.conf
但这只会在子进程中执行它,并且父脚本将看不到子进程所做的任何修改(例如,对变量的修改)。
例子:
$ # Create a file testfile that contains a variable assignment:
$ echo "a=hello" > testfile
$ # Check that the variable expands to nothing:
$ echo "$a"
$ # Good. Now execute the file testfile with bash
$ bash testfile
$ # Check that the variable a still expands to nothing:
$ echo "$a"
$ # Now _source_ the file testfile:
$ . testfile
$ # Now check the value of the variable a:
$ echo "$a"
hello
$
希望这可以帮助。
答案2
当使用“source”运行脚本时,它会在现有的 shell 中运行,脚本创建或修改的任何变量在脚本完成后仍可用。
语法 . 文件名 [参数]
source filename [arguments]