Come si imposta una variabile d'ambiente utente? (in modo permanente, non in sessione)

Questo mi irrita. Ho visto diversi suggerimenti (tutti con file e sintassi diversi) e nessuno di essi ha funzionato.

Come posso impostare una variabile d'ambiente per un utente specifico? Sono su debian squeeze. Qual è la sintassi esatta che dovrei mettere nel file per fare ABC = "123"?

Soluzione

Dovete mettere la dichiarazione nei file di inizializzazione della vostra shell:

  • Se state usando bash, ash, ksh o qualche altra shell in stile Bourne, potete aggiungere

     ABC="123"; export ABC

nel vostro file .profile (${HOME}/.profile). Questa è la situazione predefinita sulla maggior parte delle installazioni Unix, e in particolare su Debian.

Se la tua shell di login è bash, puoi usare invece .bash_profile (${HOME}/.bash_profile) o .bash_login.

Nota: Se uno di questi file esiste e la tua shell di login è bash, .profile non viene letto quando accedi tramite ssh o su una console di testo, ma potrebbe comunque essere letto al posto di .bash_profile se accedi dalla GUI. Inoltre, se non c'è un .bash_profile, allora usa .bashrc.

  • Se hai impostato zsh come shell di login, usa ~/.zprofile invece di ~/.profile.

  • Se stai usando tcsh, aggiungi

     setenv ABC "123"

nel file .login (${HOME}/.login)

  • se stai usando un'altra shell guarda il manuale della shell come definire le variabili d'ambiente e quali file vengono eseguiti all'avvio della shell.
Commentari (12)

Questa è una procedura generale che potete usare praticamente per qualsiasi shell. In ogni caso, dovete sapere con quale shell l'utente accede normalmente:

path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"

Poi dovete capire quali file di punti questa shell leggerebbe normalmente:

man $shell

Una scorciatoia che potrebbe funzionare è quella di elencare quei file di punti che contengono il nome della shell:

ls ~/.*${shell}*

Se volete controllare se uno dei file viene effettivamente letto durante il login, potete semplicemente stampare il nome del file in ognuno di essi, per esempio:

echo .bashrc

Quando si effettua il login, si dovrebbe quindi vedere quali file vengono letti, e si può decidere quale modificare. Fate attenzione a non provare a usare echo "$0" o simili, perché il valore di $0 dipende da come la shell processa i file punto, e potrebbe essere fuorviante.

Quando si tratta di dichiarare la variabile "permanentemente", notate che questo si estende solo alla sessione. Non c'è modo di accedere al valore di una variabile senza una sessione, quindi non ha significato al di fuori di essa. Se intendete "read-only", questo dipende dalla shell, e in Bash potete usare:

declare -r VAR

se ha già un valore, o

declare -r VAR=value

per assegnarlo allo stesso tempo. Non tutte le shell hanno questa caratteristica.

Per dichiarare una variabile nella maggior parte delle shell, dovresti usare un nome di variabile ([A-Za-z_][A-Za-z0-9_]*), seguito da un segno di uguale (e nessuno spazio intorno al segno di uguale), poi un valore (preferibilmente quotato a meno che il valore sia un semplice [A-Za-z0-9_]+). Per esempio:

name="John Doe"
ip=127.0.0.1
HORRIBLE=1
Commentari (0)

Usare l'esportazione.

export ABC="123"

Per controllare se è impostato, usare

env

e/o

env | grep ABC

Per aggiungerlo permanentemente, aggiungi questo al tuo file ~/.bashrc.

export ABC="123"
Commentari (6)