Co w skrypcie bash oznacza kropka, po której następuje spacja, a następnie ścieżka?

83

Natknąłem się na ten przykład, gdy próbowałem zamontować urządzenie USB w kontenerze openvz i nigdy wcześniej nie widziałem konstrukcji w drugiej linii. Czy możesz wyjaśnić, co to znaczy?

#!/bin/bash
. /etc/vz/vz.conf
Denis Connolly
źródło

Odpowiedzi:

98

To synonim wbudowanego source. Będzie wykonywać polecenia z pliku w bieżącej powłoce , zgodnie z odczytem z help sourcelub help ..

W twoim przypadku plik /etc/vz/vz.confzostanie wykonany (najprawdopodobniej zawiera tylko przypisania zmiennych, które zostaną wykorzystane później w skrypcie). Różni się od zwykłego wykonywania pliku np. Na /etc/vz/vz.confwiele sposobów: najbardziej oczywistym jest to, że plik nie musi być wykonywalny; wtedy pomyślisz o uruchomieniu go, bash /etc/vz/vz.confale spowoduje to wykonanie go tylko w procesie potomnym, a skrypt nadrzędny nie zobaczy żadnych modyfikacji (np. zmiennych) dokonanych przez dziecko.

Przykład:

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

Mam nadzieję że to pomoże.

gniourf_gniourf
źródło
14
Uwaga: .działa w większości powłok (sh, ash, ksh itp.), sourceJest specyficzny dla bash.
Dmytro Sirenko,
3
@EllGray sourceto nie tylko bash - to także powłoki w stylu C ( csh, tcsh) - i zsh. .działa w muszlach typu Bourne'a, w tym tych wymienionych . Biorąc pod uwagę, że bash jest powłoką w stylu Bourne'a i prawie żaden skrypt bash o nieskrywalnej złożoności prawdopodobnie będzie działał w powłoce w stylu C, to prawda .powinna być uważana za znacznie bardziej przenośną. Ale sourcesynonim bash .istnieje częściowo dla przenośności.
Eliah Kagan
1
@EliahKagan tak, masz rację; lepiej powiedzieć, że .jest uniwersalnie przenośny i sourcejest szeroko rozpowszechniony, ale nie działa w prosty sposób sh.
Dmytro Sirenko
5

Kiedy skrypt jest uruchamiany przy użyciu `source ', działa w ramach istniejącej powłoki, wszelkie zmienne utworzone lub zmodyfikowane przez skrypt pozostaną dostępne po zakończeniu skryptu.

Składnia nazwa pliku [argumenty]

  source filename [arguments]
Sureshkumar
źródło