2014-04-04 13 views
8

È possibile impostare una variabile per un singolo comando come questo:variabili set Bash con exec

MY_VARIABLE=my_value ./my_script.sh 

È possibile consegnare a un altro script come questo:

exec ./my_script.sh 

Ma quando provo a fare sia in questo modo:

exec MY_VARIABLE=my_value ./my_script.sh 

ottengo un errore:

exec: MY_VARIABLE=my_value: not found 

Perché è quello?
C'è un modo per farlo?

risposta

23

è necessario utilizzare env per specificare la variabile d'ambiente:

exec env MY_VARIABLE=my_value ./my_script.sh 

Se volete che il vostro script per iniziare con un ambiente vuoto o con solo le variabili specificate, utilizzare l'opzione -i.

Da man env:

env - run a program in a modified environment 
1

In bash, è possibile impostare le variabili d'ambiente per un comando mettendo le assegnazioni all'inizio del comando. Questo funziona lo stesso per exec come qualsiasi altro comando, in modo da scrivere:

MYVARIABLE=my_value exec ./my_script.sh 
+2

La cosa bella di 'env exec' è che si può utilizzare su una variabile che può o non può impostare le variabili di shell. per esempio se ho uno script che esegue alcune impostazioni per un comando arbitrario, potrei terminarlo con 'exec env" $ @ "' e funzionerà anche se "$ @" imposta le variabili. Per utilizzare questa soluzione, dovrei analizzare e dividere gli argomenti in "$ @". – Ken