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
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
Antworten:
Es ist ein Synonym des eingebauten source
. Es führt Befehle aus einer Datei in der aktuellen Shell aus , die aus help source
oder gelesen werden help .
.
In Ihrem Fall wird die Datei /etc/vz/vz.conf
ausgeführt (sehr wahrscheinlich enthält sie nur Variablenzuweisungen, die später im Skript verwendet werden). Es unterscheidet sich /etc/vz/vz.conf
in 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.conf
auszufü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.
source
ist 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 source
Synonym von bash steht zum .
Teil für Portabilität.
.
es universell tragbar und source
weit verbreitet ist, aber nicht im Klartext funktioniert sh
.
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]
.
funktioniert in den meisten Shells (sh, ash, ksh, etc),source
ist spezifisch für bash.