bashスクリプトでは、ドットの後にスペースが続き、次にパスが何を意味しますか?


83

openvzコンテナ内にusbデバイスをマウントしようとしたときにこの例に出くわしましたが、2行目のコンストラクトを見たことがありません。それが何を意味するのか説明できますか?

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

回答:


98

builtinの同義語ですsource。またはから読み取られるように、現在のシェルのファイルからコマンド実行しますhelp sourcehelp .

あなたの場合、ファイル/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
注:.ほとんどのシェル(sh、ash、kshなど)で動作しますsourceが、bashに固有です。
ドミトロSirenko

3
@EarlGray source単なる bash ではなく、Cスタイルのシェル(cshtcsh)にあり、zshもあります。リストされているもの.を含むBourneスタイルのシェルで動作します。bashはBourneスタイルのシェルであり、それほど複雑ではないbashスクリプトがCスタイルのシェルで実行さ.れることはほとんどないことを考えると、より移植性が高いと考えるべきです。しかし、bashのsource同義語は.部分的に移植性のために存在します。
エリアケイガン

1
@EliahKaganはい、あなたは正しいです。それ.は普遍的に移植性があり、source広く普及していると言ったほうが良いですが、プレーンでは機能しませんsh
ドミトロSirenko

5

「ソース」を使用してスクリプトを実行すると、既存のシェル内で実行され、スクリプトによって作成または変更された変数は、スクリプトの完了後も引き続き使用可能です。

構文 ファイル名[引数]

  source filename [arguments]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.