Come posso impostare una variabile di ambiente utente? (permanentemente, non sessione)


145

Questo mi sta irritando. Ho visto diversi suggerimenti (tutti usando file e sintassi diversi) e nessuno di loro ha funzionato.

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


7
Cosa hai già provato?
l0b0,

1
modifica di .bashrc, .bash_profile, .profile e .ssh / eviroment. Anche se non so se l'ho scritto nel posto giusto o se avevo la sintassi giusta ogni volta

4
.bashrcè il posto principale per quello.
rozcietrzewiacz,

@rozcietrzewiacz: ok ma ... anche dopo aver trovato la soluzione ho provato a impostare ABC1 e ABC2 all'inizio e alla fine di quel file e non è impostato nel mio ambiente.

1
Controlla che .bash_profilecontenga qualcosa di simile [[ -f ~/.bashrc ]] && . ~/.bashrc.
rozcietrzewiacz,

Risposte:


113

Devi inserire la dichiarazione nei file di inizializzazione della tua shell:

  • Se stai usando bash, ash, ksh o qualche altra shell in stile Bourne, puoi aggiungere

    ABC="123"; export ABC
    

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

    Se la shell di accesso è bash, puoi usare .bash_profile( ${HOME}/.bash_profile) o .bash_logininvece.

    Nota: se uno di questi file esiste e la shell di accesso è bash, .profilenon viene letta quando si accede su ssh o su una console di testo, ma potrebbe comunque essere letta invece che .bash_profilese si accede dalla GUI. Inoltre, se non esiste .bash_profile, utilizzare .bashrc.

  • Se hai impostato zsh come shell di accesso, utilizza ~/.zprofileinvece di ~/.profile.

  • Se stai usando tcsh, aggiungi

    setenv ABC "123"
    

    in .loginfile ( ${HOME}/.login)

  • se si sta utilizzando un'altra shell, consultare il manuale della shell come definire le variabili di ambiente e quali file vengono eseguiti all'avvio della shell.


5
Il comportamento predefinito di su userè quello di cambiare la proprietà della shell corrente con il nome utente arg, mantenendo la directory home e l'ambiente dell'utente chiamante. Per entrare in una shell in modo da diventare il nuovo utente e ottenere tutte le sue impostazioni ambientali ($ PATH, $ HOME, $ ABC, ecc.) Devi passare un - come primo argomento su su. su - usernamerealizzerà ciò che stai chiedendo.
Tim Kennedy,

1
Aspetta: cosa intendi con "uscito da root"? In ogni caso, fare un 'su' non inizializza la shell. Hai bisogno di "su -" (vedi man su)
Matteo,

1
Perché suin primo luogo? Non hai appena creato un root di proprietà .profileche non può essere utilizzato dall'utente?
rozcietrzewiacz,

1
@acido questo è ciò che avrebbe dovuto fare. La domanda è: che cosa è di provenienza al momento del login. Per verificare che, log out prima.
rozcietrzewiacz,

7
Poiché .profileviene letto da tutte le shell compatibili con Bourne, non è necessario scrivere la sintassi di Bash in quel file. In particolare, export VARIABLE=valuedeve essere sottoposto a refactoring in VARIABLE=value; export VARIABLE.
Tripleee

48

Utilizzare il /etc/environmentfile per impostare le variabili di ambiente. Quindi aggiungere la seguente riga all'interno del /etc/environmentfile.

ABC="123"

Ora la variabile ABC sarà accessibile da tutte le sessioni utente. Per verificare l'output della variabile, aggiornare innanzitutto la variabile di ambiente utilizzando il comando

source /etc/environment

e corri echo $ABC.


4
+1 per il comando sorgente. Ciò mancava in tutte le risposte
Nerrve,

5
Fai attenzione che /etc/environmentnon supporti la sintassi completa di bash, qualcosa che ho capito nel modo più duro. Ad esempio, mettere PATH="/usr/bin:/usr/sbin"e poi fare PATH="$PATH:/foo/bar"su una riga seguente non funzionerà
user2428118

Non sono sicuro se si tratti di un problema personale o altro, ma ho dovuto riavviare il sistema operativo dopo averlo impostato /etc/environment, anche se ho riavviato il terminale Bash o digitato source /etc/environment. Quindi, se riscontri problemi in cui la variabile d'ambiente non si perpetua, prova a riavviare.
Blairg23,

9

Questa è una procedura generale che puoi usare praticamente per qualsiasi shell. In ogni caso, devi sapere con quale shell l'utente normalmente accederà:

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

Quindi devi capire quali file di punti questa shell normalmente legge:

man $shell

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

ls ~/.*${shell}*

Se vuoi verificare se uno dei file viene effettivamente letto durante l'accesso, puoi semplicemente stampare il nome del file in ciascuno di essi, ad esempio:

echo .bashrc

Quando accedi, dovresti vedere quali file vengono letti e puoi decidere quale modificare. Fai attenzione a non provare a usare echo "$0"o simili, perché il valore di $0dipende da come la shell elabora i file dot e potrebbe essere fuorviante.

Quando si tratta di dichiarare la variabile "permanentemente", si noti che ciò si estende solo alla sessione. Non è possibile accedere al valore di una variabile senza una sessione, quindi non ha alcun significato al di fuori di una. Se intendi "sola lettura", dipende dalla shell e in Bash puoi usare:

declare -r VAR

se ha già un valore, o

declare -r VAR=value

per assegnarlo contemporaneamente. Non tutte le shell hanno questa funzione.

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 senza spazi attorno al segno di uguale), quindi un valore (preferibilmente tra virgolette a meno che il valore non sia semplice [A-Za-z0-9_]+). Per esempio:

name="John Doe"
ip=127.0.0.1
HORRIBLE=1

5

Usa esportazione.

export ABC="123"

Per verificare se è impostato, utilizzare

env

e / o

env | grep ABC

Per aggiungerlo permanentemente, aggiungilo al tuo ~/.bashrcfile.

export ABC="123"

6
Vuole sapere a caldo per definirlo in modo permanente , cioè in quale file inserire la definizione.
Matteo,

1
Non funziona. Una volta disconnesso, la variabile scompare. Ne ho bisogno in tutte le sessioni

1
intendi permenatee non permenently: D
whoami,

guarda modifica perbashrc
whoami,

5
cosa permenate? intendi permanent?
SSH Questo

3

Il comando esatto è:

echo 'export ABC = "123"' >> ~/.profile

4
Esattamente? Sul serio? Quale shell (a) legge ~/.profilee (b) consente lo spazio prima e dopo =?
G-Man,

1

Il modo migliore che ha funzionato per me è modificare il file .bashrc nella shell BASH.

usare questo per esempio:

  1. apri il tuo file .bashrc
  2. aggiungi questa riga:

    export <VARIABLE> = "<ANY PATH/VALUE you want>"
    

    per esempio : export HOME = "/home/user/"

    Ricorda di usare ""poiché l'utilizzo ' 'non funzionerà e il tuo file bashrc segnalerà un errore durante l'approvvigionamento.

  3. fonte nella sessione corrente.

Ho anche provato a modificare il file / etc / environment ma non mi ha permesso di creare una nuova variabile d'ambiente e quando l'ho provata, mi ha provocato l'errore che la variabile definita non è stata trovata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.