GNU/Linux >> Linux Esercitazione >  >> Linux

Importa funzioni e variabili in Bash con il comando sorgente

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.


Linux
  1. Ruota e archivia i registri con il comando logrotate di Linux

  2. Controlla i comandi e le attività con il comando watch di Linux

  3. Trova file e directory su Linux con il comando find

  4. Navigazione nella shell Bash con pushd e popd

  5. Usando la cronologia di bash per ottenere un comando precedente, copialo e poi "eseguilo" ma con il comando commentato

Comando sorgente Bash

Comando di uscita Bash e codici di uscita

I comandi alias e unalias spiegati con esempi

Differenza tra la definizione di variabili Bash con e senza esportazione

Funzioni nelle variabili Shell?

Che cos'è il comando sorgente in Linux e come funziona?