In uno script bash cosa significa un punto seguito da uno spazio e quindi un percorso?


83

Mi sono imbattuto in questo esempio quando ho provato a montare un dispositivo USB all'interno di un contenitore openvz e non avevo mai visto il costrutto nella seconda riga prima. Puoi spiegarci cosa significa?

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

Risposte:


98

È sinonimo di builtin source. Sarà eseguire comandi da un file nella shell corrente , come leggere help sourceo help ..

Nel tuo caso, il file /etc/vz/vz.confverrà eseguito (molto probabilmente, contiene solo assegnazioni di variabili che verranno utilizzate in seguito nello script). Si differenzia dal solo eseguire il file con, ad esempio, /etc/vz/vz.confin molti modi: il più ovvio è che il file non deve essere eseguibile; allora penserai di eseguirlo bash /etc/vz/vz.confma questo lo eseguirà solo in un processo figlio, e lo script padre non vedrà alcuna modifica (ad esempio, delle variabili) che il figlio fa.

Esempio:

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

Spero che sia di aiuto.


14
Solo una nota: .funzionerà nella maggior parte delle shell (sh, ash, ksh, ecc.), sourceÈ specifico per bash.
Dmytro Sirenko,

3
@EarlGray sourcenon è solo bash - è anche in shell in stile C ( csh, tcsh) - e anche zsh. .funziona con gusci in stile Bourne compresi quelli elencati . Considerando che bash è una shell in stile Bourne e che quasi nessuno script bash di complessità non banale può essere eseguito in una shell in stile C, è vero che .dovrebbe essere considerato molto più portatile. Ma il sourcesinonimo di bash .esiste in parte per la portabilità.
Eliah Kagan,

1
@EliahKagan sì, hai ragione; è meglio dire che .è universalmente portatile ed sourceè molto diffuso, ma non funziona in modo chiaro sh.
Dmytro Sirenko,

5

Quando uno script viene eseguito usando `source ', viene eseguito all'interno della shell esistente, tutte le variabili create o modificate dallo script rimarranno disponibili dopo il completamento dello script.

Sintassi. nomefile [argomenti]

  source filename [arguments]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.