Quando accedi a una shell Linux, erediti un ambiente di lavoro specifico. Un ambiente , nel contesto di una shell, significa che ci sono alcune variabili già impostate per te, il che assicura che i tuoi comandi funzionino come previsto. Ad esempio, la variabile di ambiente PATH definisce dove la shell cerca i comandi. Senza di esso, quasi tutto ciò che provi a fare in Bash fallirebbe con un comando non trovato errore. Il tuo ambiente, sebbene per lo più invisibile a te mentre svolgi le tue attività quotidiane, è di vitale importanza.
Esistono molti modi per influenzare l'ambiente della shell. Puoi apportare modifiche ai file di configurazione, come ~/.bashrc
e ~/.profile
, puoi eseguire servizi all'avvio e puoi creare i tuoi comandi personalizzati o creare script per le tue funzioni Bash.
Aggiungi al tuo ambiente con il codice sorgente
Bash (insieme ad alcune altre shell) ha un comando integrato chiamato source
. Ed ecco dove può creare confusione:source
esegue la stessa funzione del comando .
(sì, è solo un punto singolo) e non lo stesso source
come Tcl
comando (che potrebbe apparire sullo schermo se digiti man source
). Il source
integrato il comando non è nel tuo PATH
affatto, in effetti. È un comando incluso come parte di Bash e per ottenere ulteriori informazioni al riguardo, puoi digitare help source
.
Il .
il comando è conforme a POSIX. Il source
il comando non è definito da POSIX ma è intercambiabile con il .
comando.
Altro su Bash
- Cheat sheet di Bash
- Un'introduzione alla programmazione con Bash
- Una guida per l'amministratore di sistema allo scripting Bash
- Ultimi articoli di Bash
Secondo Bash help
, il source
comando esegue un file nella shell corrente. La clausola "in your current shell" è significativa, perché significa che non avvia una sub-shell; quindi, qualunque cosa tu esegua con source
accade all'interno e influisce sulla tua corrente ambiente.
Prima di esplorare come source
può influenzare il tuo ambiente, prova source
su un file di test per assicurarsi che esegua il codice come previsto. Per prima cosa, crea un semplice script Bash e salvalo come file chiamato hello.sh
:
#!/usr/bin/env bash
echo "hello world"
Usando source
, puoi eseguire questo script anche senza impostare il bit eseguibile:
$ source hello.sh
hello world
Puoi anche utilizzare il .
comando per gli stessi risultati:
$ . hello.sh
hello world
Il source
e .
i comandi eseguono correttamente il contenuto del file di test.
Imposta variabili e funzioni di importazione
Puoi usare source
per "importare" un file nel tuo ambiente shell, proprio come potresti usare include
parola chiave in C o C++ per fare riferimento a una libreria o all'import
parola chiave in Python per inserire un modulo. Questo è uno degli usi più comuni di source
, ed è un'inclusione predefinita comune in .bashrc
file in source
un file chiamato .bash_aliases
in modo che tutti gli alias personalizzati che definisci vengano importati nel tuo ambiente quando accedi.
Ecco un esempio di importazione di una funzione Bash. Per prima cosa, crea una funzione in un file chiamato myfunctions
. Questo stampa il tuo indirizzo IP pubblico e il tuo indirizzo IP locale:
function myip() {
curl http://icanhazip.com
ip addr | grep inet$IP | \
cut -d"/" -f 1 | \
grep -v 127\.0 | \
grep -v \:\:1 | \
awk '{$1=$1};1'
}
Importa la funzione nella tua shell:
$ source myfunctions
Metti alla prova la tua nuova funzione:
$ myip
93.184.216.34
inet 192.168.0.23
inet6 fbd4:e85f:49c:2121:ce12:ef79:0e77:59d1
inet 10.8.42.38
Cerca la fonte
Quando usi source
in Bash, cerca nella directory corrente il file a cui fai riferimento. Questo non accade in tutte le shell, quindi controlla la tua documentazione se non stai usando Bash.
Se Bash non riesce a trovare il file da eseguire, cerca il tuo PATH
invece. Ancora una volta, questa non è l'impostazione predefinita per tutte le shell, quindi controlla la tua documentazione se non stai usando Bash.
Queste sono entrambe belle caratteristiche di praticità in Bash. Questo comportamento è sorprendentemente potente perché consente di archiviare le funzioni comuni in una posizione centralizzata sull'unità e quindi di trattare l'ambiente come un ambiente di sviluppo integrato (IDE). Non devi preoccuparti di dove sono archiviate le tue funzioni, perché sai che sono nel tuo equivalente locale di /usr/include
, quindi non importa dove ti trovi quando li procuri, Bash li trova.
Ad esempio, puoi creare una directory chiamata ~/.local/include
come area di archiviazione per le funzioni comuni e quindi inserisci questo blocco di codice nel tuo .bashrc
file:
for i in $HOME/.local/include/*;
do source $i
done
Questo "importa" qualsiasi file contenente funzioni personalizzate in ~/.local/include
nel tuo ambiente shell.
Bash è l'unica shell che ricerca sia la directory corrente che il tuo PATH
quando usi il source
o il .
comando.
Utilizzo del codice sorgente per l'open source
Usando source
o .
eseguire file può essere un modo conveniente per influenzare il tuo ambiente mantenendo le modifiche modulari. La prossima volta che pensi di copiare e incollare grandi blocchi di codice nel tuo .bashrc
file, considera la possibilità di inserire funzioni correlate o gruppi di alias in file dedicati, quindi utilizza source
per ingerirli.