在bash脚本中,点,空格和路径是什么意思?


83

尝试将USB设备安装在openvz容器中时遇到了这个示例,但我之前从未在第二行中看到过该构造。您能解释一下它的含义吗?

#!/bin/bash
. /etc/vz/vz.conf

Answers:


98

这是内建的同义词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
$

希望这可以帮助。


14
只需注意:.在大多数shell(sh,ash,ksh等)中均可使用,source专用于bash。
Dmytro Sirenko

3
@EarlGray source只是 bash的-它在C风格的贝壳(cshtcsh) -和zsh的了。.可在Bourne风格的shell(包括列出的 shell)中使用。考虑到bash是Bourne风格的shell,几乎没有任何平凡的bash脚本都可能在C风格的shell中运行,因此,确实.应该将其视为更可移植的。但是,bash的source同义词部分.存在于可移植性中。
伊利亚·卡根

1
@EliahKagan是的,你是对的;最好说它.是通用的,source并且用途广泛,但不能简单地使用sh
Dmytro Sirenko 2014年

5

当使用`source'运行脚本时,它在现有的shell中运行,脚本完成后,由脚本创建或修改的任何变量将保持可用。

句法 。文件名[参数]

  source filename [arguments]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.