Esecuzione di script shell senza variabili ambientali


17

Come so, il nuovo script di shell in esecuzione eredita le sue variabili di ambiente. C'è un modo per bloccare questo? (esecuzione della shell senza ereditare le variabili)

Risposte:


21

Sembra che puoi aggiungere il prefisso allo script con il env -iquale cancellerà l'ambiente prima di eseguire lo script:

env -i sh test.sh

Da man env:

-i, --ignore-environment
              start with an empty environment

Non sono sicuro del motivo per cui vorresti farlo, però ...


Grazie. Questo ha funzionato! Ne ho bisogno per chiamare lo script di build in IDE senza influenzare le variabili ambientali di configurazione di IDE. Ma ancora lontano dall'obiettivo. Questo può aiutare la tua curiosità!
Eonil,

Per aggiungere un altro caso d'uso: sto attualmente valutando fish e zsh come alternativa a bash. Ma non sono ancora pronto a promuovere la shell candidata come shell di login (come in chsh .... Se apro una finestra terminale ed eseguo zsho fish(con o senza -l, non importa) inquina il mio ambiente con tutti i tipi di variabili dal shell Ho iniziato. Fare il trucco env -crisolve questo problema per me env -i TERM=xterm-256color $(which fish).
Paidhi,

Questo è utile se hai un'attività cron che non riesce perché l'ambiente non è configurato correttamente e devi testarlo; anche un buon modo per verificare se gli script fanno ipotesi sulle impostazioni dell'ambiente. Grazie!
abbagliato il

Un altro possibile posto che potrebbe essere utile è testare alcuni lavori periodici (come cron lavori) per assicurarsi che non ci siano dipendenze ambientali dallo script. Stessa cosa con i comandi che verrebbero eseguiti in una risorsa "Exec" in un manifest di marionette.
TommyTheKid,

1

Una possibilità (anche se sembra piuttosto brutta):

exec -c $SCRIPTinizierà $ SCRIPT con un ambiente vuoto. (vedi man bashricerca per exec \[-cl\]).


1
Questo ha funzionato quasi allo stesso modo con env -i, tuttavia, ho scelto di usare env -i perché exec smette di eseguire il resto dello script.
Eonil,

-1

Per quanto ne so, la risposta è "No". È possibile ignorare le variabili ambientali all'interno dello script stesso. Il valore della variabile d'ambiente dovrebbe tornare al suo valore originale una volta eseguita l'esecuzione dello script. Probabilmente dovrai eseguire lo script come un processo figlio: $ this.script.sh e così da evitare di dover uscire dalla shell ogni volta che esegui lo script per ripristinare le variabili di ambiente al loro valore originale.

Modificare:

Da un poster precedente, sembrerebbe che mi sbagli sul fatto che non sia possibile.

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.