Se il tuo lavoro prevede di eseguire operazioni tramite la riga di comando in Linux, molto probabilmente utilizzerai la shell Bash. Sapevi che esiste un ambiente associato ai processi eseguiti tramite la shell? E, se lo desideri, puoi modificare questo ambiente in modo specifico per l'attività che stai svolgendo? Bene, in questo articolo parleremo di uno strumento da riga di comando - env - che non solo ti consente di accedere all'ambiente della shell, ma ti consente anche di apportare modifiche allo stesso quando necessario.
Ma prima di farlo, vale la pena ricordare che tutti i comandi e le istruzioni menzionati in questo tutorial sono stati testati sulla shell Bash in esecuzione su Ubuntu 16.04LTS.
Comando Linux env
Per definizione, il comando env consente di eseguire un programma in ambiente modificato. Di seguito è riportata la sintassi del comando, come menzionato nella sua pagina man:
env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
Ed ecco cosa dice la pagina man su env:
Set each NAME to VALUE in the environment and run COMMAND.
I seguenti esempi in stile domande e risposte dovrebbero darti un'idea migliore di come funziona questo comando:
Q1. Come accedere a tutte le variabili di ambiente usando il comando env?
L'ambiente Bash, come forse già saprai, è costituito da voci VARNAME=VALUE. Per accedere a tutte le variabili di ambiente e ai valori ad esse associati, esegui il comando env senza alcuna opzione.
env
Ecco l'output del comando precedente nel nostro caso:
Q2. Come modificare temporaneamente l'ambiente utilizzando env?
La funzionalità chiave offerta da env è la possibilità di modificare temporaneamente l'ambiente per un processo. Ad esempio, abbiamo creato un piccolo eseguibile - soprannominato env - che mostra il valore della variabile d'ambiente USER al momento dell'esecuzione.
Ecco l'output nello scenario normale:
Ora, quello che abbiamo fatto è stato, abbiamo usato il comando env per modificare temporaneamente il valore della variabile di ambiente USER da "himanshu" a "HTF" per l'eseguibile/processo. Di seguito è riportato il comando che abbiamo utilizzato in questo caso:
env USER=HTF ./env
Ed ecco l'output prodotto in questo caso:
Quindi puoi vedere che l'eseguibile ha restituito il nuovo valore.
Nota:come suggerito dalla sintassi generica dello strumento, puoi modificare i valori di più variabili di ambiente e fare in modo che il processo utilizzi questi nuovi valori.
T3. Come fare in modo che un processo ignori l'ambiente esistente usando env?
Se lo desideri, puoi anche fare in modo che un processo ignori l'ambiente esistente/ereditato e inizi invece con uno vuoto. Questo può essere fatto usando il -i o --ignore-environment opzione.
Ad esempio:
Q4. In che modo env usa NUL invece del carattere di nuova riga nell'output?
Nel primo esempio discusso sopra, le righe di output prodotte da env sono separate da newline. Tuttavia, se lo desideri, puoi fare in modo che env utilizzi il carattere NUL come separatore. È possibile accedere a questa funzione utilizzando --null opzione della riga di comando.
env --null
Di seguito è riportato uno screenshot di esempio;
Q5. Come conoscere l'errore in base allo stato di uscita del comando env?
Il comando env produce i seguenti codici di uscita:0, 125, 126 e 127. Di seguito sono riportate le descrizioni degli errori associati:
0 if no COMMAND is specified and the environment is output
125 if ‘env’ itself fails
126 if COMMAND is found but cannot be invoked
127 if COMMAND cannot be found
Nel caso in cui ricevi un codice di errore diverso da quelli sopra menzionati, allora quello è lo stato di uscita restituito dal processo/comando che è stato eseguito con l'ambiente modificato.
Conclusione
Se sei un principiante completo della riga di comando, è probabile che non avrai bisogno di questo strumento su base giornaliera. Tuttavia, questo non vuol dire che non valga la pena di essere informato - infatti, env è davvero utile in molte situazioni. Gli esempi che abbiamo condiviso in questo tutorial dovrebbero essere sufficienti per darti un vantaggio. Per ulteriori informazioni, vai alla pagina man del comando, o meglio, esegui il seguente comando:
info coreutils env invocation