Analisi dei file di configurazione con Bash
La separazione dei file di configurazione dal codice consente a chiunque di modificare le proprie configurazioni senza particolari competenze di programmazione.
È importante mantenere le configurazioni del programma separate dal codice. Consente ai non programmatori di alterare le configurazioni senza dover modificare il codice del programma. Con gli eseguibili binari compilati, ciò sarebbe impossibile per i non programmatori perché non solo richiede l'accesso ai file sorgente (che abbiamo con i programmi open source) ma anche le competenze di un programmatore. Poche persone ce l'hanno e la maggior parte non vuole imparare.
Con i linguaggi di shell come Bash, l'accesso al codice sorgente è disponibile per definizione poiché gli script di shell non sono compilati in formati binari. Nonostante questa apertura, non è una buona idea per i non programmatori frugare negli script di shell e modificarli. Anche sviluppatori e amministratori di sistema esperti possono apportare modifiche accidentali che causano errori o peggio.
Pertanto, l'inserimento degli elementi di configurazione in file di testo di facile manutenzione garantisce la separazione e consente ai non programmatori di modificare gli elementi di configurazione senza il pericolo di apportare modifiche involontarie al codice. Molti sviluppatori lo fanno per programmi scritti in linguaggi compilati perché non si aspettano che gli utenti siano sviluppatori. Per molte delle stesse ragioni ha senso farlo anche con linguaggi di shell interpretati.
Il solito modo
Come con molti altri linguaggi, è possibile scrivere codice per un programma Bash che legga e analizzi file di configurazione di testo ASCII, legga il nome della variabile e imposti valori durante l'esecuzione del codice del programma. Ad esempio, un file di configurazione potrebbe assomigliare a questo:
var1=LinuxGeek46
var2=Opensource.com
Il programma leggerebbe quel file, analizzerà ogni riga e imposterà i valori in ciascuna variabile.
Reperimento
Bash utilizza un metodo molto più semplice per analizzare e impostare le variabili chiamato sourcing. Ottenere un file esterno da un programma shell eseguibile è un metodo semplice per includere il contenuto di quel file in un programma shell nella sua interezza. In un certo senso, questo è molto simile alle istruzioni include
del linguaggio compilato che includono file di libreria in fase di runtime. Tale file può includere qualsiasi tipo di codice Bash, comprese le assegnazioni di variabili.
Come al solito è più facile dimostrare che spiegare.
Innanzitutto, crea una directory ~/bin
(se non esiste già) e rendila la directory di lavoro attuale (PWD). Lo standard gerarchico del filesystem Linux definisce ~/bin
come il luogo appropriato in cui gli utenti possono archiviare i propri file eseguibili.
Crea un nuovo file in questa directory. Chiamalo main
e rendilo eseguibile:
[dboth@david bin]$ touch main
[dboth@david bin]$ chmod +x main
[dboth@david bin]$
Aggiungi il seguente contenuto a questo file eseguibile:
#!/bin/bash
Name="LinuxGeek"
echo $Name
Ed esegui questo programma Bash:
[dboth@david bin]$ ./main
LinuxGeek
[dboth@david bin]$
Crea un nuovo file e chiamalo ~/bin/data
. Non è necessario che questo file sia eseguibile. Aggiungi le seguenti informazioni:
# Sourced code and variables
echo "This is the sourced code from the data file."
FirstName="David"
LastName="Both"
Aggiungi tre righe al programma main
in modo che assomigli a questo:
#!/bin/bash
Name="LinuxGeek"
echo $Name
source ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"
Rieseguire il programma:
[dboth@david bin]$ ./main
LinuxGeek
This is the sourced code from the data file.
First name: David
LastName: Both
[dboth@david bin]$
C’è un’altra cosa davvero interessante da sapere sull’approvvigionamento. Puoi utilizzare un singolo punto (.
) come scorciatoia per il comando source
. Modifica il file main
per sostituire .
al posto di source
:
#!/bin/bash
Name="LinuxGeek"
echo $Name
. ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"
Ed esegui nuovamente il programma. Il risultato dovrebbe essere esattamente lo stesso della corsa precedente.
Avvio di Bash
Ogni host Linux che utilizza Bash, ovvero praticamente tutti poiché Bash è la shell predefinita per tutte le distribuzioni, include alcuni eccellenti esempi di sourcing integrati.
Ogni volta che viene avviata una shell Bash, il suo ambiente deve essere configurato in modo che sia utilizzabile. Esistono cinque file principali e una directory utilizzati per configurare l'ambiente Bash. Li elenchiamo qui insieme alle loro funzioni principali:
/etc/profile
: ambiente di sistema e programmi di avvio/etc/bashrc
: funzioni e alias a livello di sistema/etc/profile.d/
: directory che contiene script a livello di sistema per la configurazione di vari strumenti da riga di comando comevim
emc
e qualsiasi script di configurazione personalizzati creati da un amministratore di sistema~/.bash_profile
: ambiente specifico dell'utente e programmi di avvio~/.bashrc
: alias e funzioni specifici dell'utente~/.bash_logout
: comandi specifici dell'utente da eseguire quando l'utente si disconnette
Prova a tracciare la sequenza di esecuzione attraverso questi file e determina quale sequenza utilizza per un'inizializzazione Bash senza accesso rispetto a un'inizializzazione Bash con accesso. L'ho fatto nel capitolo 17 del volume 1 della mia serie di corsi su Linux, Utilizzo e amministrazione di Linux: Zero to sysadmin.
Ti darò un suggerimento. Tutto inizia con lo script ~/.bashrc
.
Conclusione
Questo articolo ha esplorato il sourcing per inserire codice e assegnazioni di variabili in un programma Bash. Questo metodo di analisi delle variabili da un file di configurazione è veloce, facile e flessibile. Fornisce un metodo per separare il codice Bash dalle assegnazioni delle variabili per consentire ai non programmatori di impostare i valori di tali variabili.