equivalente `setx` in Ubuntu


9

Windows ha un comando powershell chiamato setxche crea o modifica le variabili di ambiente nell'ambiente utente o di sistema.

Ubuntu ha un comando simile, cioè non usando nanoo vi, solo una riga per aggiungere o aggiornare una variabile di ambiente a livello di sistema.

Soluzione implementata

Una riga da aggiungere / aggiornare

grep env_name /etc/environment && sed -i.bak 's/env_name=.*/env_name="env_value"/' /etc/environment || echo 'env_name="env_value"' >> /etc/environment

Risposte:


12

Puoi farlo semplicemente dichiarandolo come nuovo nella riga di comando o dichiarandolo nuovamente. Ad esempio, se vuoi aggiungere ~/testfolderalla tua variabile path, puoi semplicemente inserirla nel tuo terminale corrente (questo è solo un esempio):

PATH="$HOME/testfolder:$PATH"

Questo ovviamente lo cambierà solo per il momento in cui hai detto che la sessione terminale è aperta. Si noti l' $utilizzo qui, lo si lascia fuori per la dichiarazione, ma se si desidera visualizzarlo è necessario aggiungere $per espandere il suo contenuto.

Se si desidera dichiararli più duraturi e generali, è possibile aggiungerli nel file ~/.bashrc(solo per l'utente) o in /etc/bash.bashrc(a livello di sistema), ad esempio se si desidera che vengano conteggiati solo per te o per tutti gli utenti. Un'altra opzione è aggiungerlo al tuo .profilefile (solo per te stesso) dove sarà praticabile dal momento in cui accedi. Puoi farlo con echoad esempio se sei sicuro che questa variabile non sia già impostata o se ne crei di nuovi (solo un esempio):

echo "variable=value" >> /path/filename

Se tuttavia vuoi modificare un file al di fuori della tua directory utente, il che è il caso quando vuoi modificarlo, /etc/bash.bashrcdevi usare sudoe quindi non puoi semplicemente usare un 'documento qui' poiché questo non funzionerebbe, invece usa una riga come sotto:

echo "variable=value" | sudo tee -a /path/filename

Se la variabile tuttavia esiste già, puoi cambiarla con il sedcomando (anche solo un esempio):

sed -i.bak 's/variable=value/variable=new-value/' /path/filename

Ciò modificherà la variabile nel file ma ne creerà un backup prima della modifica. Se cambi file al di fuori della tua directory utente con sed, devi usarli sudonella maggior parte dei casi, quindi la linea sarebbe:

sudo sed -i.bak 's/variable=value/variable=new-value/' /path/filename

Anche la rimozione di una variabile da un file può essere eseguita sed, lasciando vuota la seconda parte della regex:

sed -i.bak 's/variable=value//' /path/filename

Se sei interessato a quali variabili di ambiente sono impostate, puoi utilizzare il envcomando per elencarle ( set -o posix ; set ) | lesso sh -c set. Tutti e tre forniscono varie quantità di output, ( set -o posix ; set ) | lessrestituendo la maggior parte delle variabili che sono effettivamente impostate.


1
Invece di ( set -o posix ; set )è più semplice da dire sh -c set. Funzionerà anche se shè un link simbolico a bash(che normalmente non è nelle moderne versioni di Ubuntu).
Ruslan,

@ruslan sh -c setnon mostra davvero tutte le variabili d'ambiente impostate sul sistema. Tuttavia lo includerò come terzo modo per mostrarne alcuni.
Videonauth,

sh -c setMostra effettivamente tutte le variabili di ambiente . Semplicemente non mostra le variabili della shell della shell chiamante, ma queste non vengono mai ereditate da un processo eseguito da quella shell, a meno che tu non exportle abbia.
Ruslan,

C'è mai un motivo valido per modificare /etc/environment? Sembra che sia una scorciatoia per la confusione.
Roger Lipscombe,

@RogerLipscombe Grazie, non ne ero sicuro, è ancora un posto praticabile in cui modificare le variabili, ma l'ho tirato fuori per non creare confusione.
Videonauth,

11

Non esiste un equivalente diretto di setx /m, ma ci sono modi per realizzare ciò che setx /mfa.

setx /mmette variable=valuedentro HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. Non- / m (cioè per utente) setxsemplicemente mette l' variable=valuein HKCU\Environment.

Hai chiesto espressamente "a livello di sistema". A tale scopo, aggiungere la coppia valore-variabile a /etc/environmentOR a /etc/profile.d/<yourfile>. Il primo è valutato da PAM, mentre il secondo è valutato da /bin/sh. Quindi, in /etc/profile.d/<yourfile>, aggiungeresti variable=value; export variable. (bash lo permette anche export variable=value). Per /etc/environmentte aggiungerei variable=value.

Gli equivalenti per utente sono ~/.pam_environmente ~/.profile.

Vedi anche: https://help.ubuntu.com/community/EnvironmentVariables


7

È possibile esportare le variabili di ambiente dalla riga di comando, ma ciò non influirà sull'ambiente effettivo nei processi già avviati, solo nel processo corrente e nei relativi sottoprocessi. Quindi, in pratica, spesso è necessario accedere nuovamente quando si cambiano le variabili di ambiente.

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.