Was bedeutet in einem Bash-Skript ein Punkt, gefolgt von einem Leerzeichen und einem Pfad?

83

Ich bin auf dieses Beispiel gestoßen, als ich versucht habe, ein USB-Gerät in einen openvz-Container zu mounten, und habe das Konstrukt in der zweiten Zeile noch nie gesehen. Können Sie erklären, was es bedeutet?

#!/bin/bash
. /etc/vz/vz.conf
Denis Connolly
quelle

Antworten:

98

Es ist ein Synonym des eingebauten source. Es führt Befehle aus einer Datei in der aktuellen Shell aus , die aus help sourceoder gelesen werden help ..

In Ihrem Fall wird die Datei /etc/vz/vz.confausgeführt (sehr wahrscheinlich enthält sie nur Variablenzuweisungen, die später im Skript verwendet werden). Es unterscheidet sich /etc/vz/vz.confin vielerlei Hinsicht von der Ausführung der Datei : Das offensichtlichste ist, dass die Datei nicht ausführbar sein muss. Dann werden Sie daran denken, es mit bash /etc/vz/vz.confauszuführen, aber dies führt es nur in einem untergeordneten Prozess aus, und das übergeordnete Skript sieht keine Änderungen (z. B. von Variablen), die das untergeordnete Skript vornimmt.

Beispiel:

$ # 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
$

Hoffe das hilft.

gniourf_gniourf
quelle
14
Nur eine Anmerkung: .funktioniert in den meisten Shells (sh, ash, ksh, etc), sourceist spezifisch für bash.
Dmytro Sirenko
3
@EarlGray sourceist nicht nur bash - es ist in C-Style Shells ( csh, tcsh) - und zsh auch. .funktioniert in Bourne-artigen Shells, einschließlich der aufgelisteten . In Anbetracht der Tatsache, dass bash eine Bourne-Shell ist und kaum ein Bash-Skript von nicht-trivialer Komplexität in einer C-Shell ausgeführt werden kann, .sollte dies als wesentlich portabler angesehen werden. Aber das sourceSynonym von bash steht zum .Teil für Portabilität.
Eliah Kagan
1
@EliahKagan ja, du hast recht; Es ist besser zu sagen, dass .es universell tragbar und sourceweit verbreitet ist, aber nicht im Klartext funktioniert sh.
Dmytro Sirenko
5

Wenn ein Skript unter Verwendung von "source" ausgeführt wird, wird es in der vorhandenen Shell ausgeführt. Alle vom Skript erstellten oder geänderten Variablen bleiben verfügbar, nachdem das Skript abgeschlossen wurde.

Syntax . Dateiname [Argumente]

  source filename [arguments]
Suresh Kumar
quelle