2013-10-27 33 views
9

Sto provando a generare un file con una variabile di ambiente dal mio script bash, ma non funziona.Come scaricare il file dallo script di bash

Questo è il contenuto del mio script (test.sh), che si trova in ~/scripts/test.sh.

#!/bin/bash 
FILE_NAME=/tmp/source_file 
touch $FILE_NAME 
echo "export TEST=\"test\"" > $FILE_NAME 
source $FILE_NAME 

allora io uso alias in my ~/.bashrc.

alias testScript=~/scripts/test.sh 

Ma quando io uso il mio script testScript, non ha impostato la variabile d'ambiente.

+0

Che cosa si intende per "esso non ha definito variabile d'ambiente" ? Qual è il tuo risultato previsto? –

+0

Quando provo echo $ TEST non vedo alcun valore – franki3xe

+0

Il file '/ tmp/source_file' contiene quello che ti aspetti? –

risposta

9

Le variabili di ambiente scorrono solo a valle nell'albero del processo.

Quando si digita testScript ad un processo bash, si crea un processo figlio e dirigenti /bin/bash o tutto ciò che è stabilito dal #!

Qualsiasi variabili d'ambiente impostate rimangono solo con il processo figlio. L'esportazione fa sì che le variabili vengano copiate su altri nipoti (figli di quel bambino) che potrebbero essere generati da quel bambino.

Niente può copiare su un genitore. È necessario utilizzare la fonte anziché eseguire il file. Vedi la risposta di Jonathan.

Si potrebbe provare a modificare i file ~/.bashrc o ~/.login per impostare le variabili di ambiente che si richiedono frequentemente.

Vedere anche https://superuser.com/q/153371 e https://superuser.com/questions/18988/difference-between-a-b-and-export-a-b-in-bash per ulteriori informazioni su export in bash.

9

è necessario utilizzare:

alias testScript=". ~/scripts/test.sh" 

alla fonte del file. Oppure puoi usare source al posto di ., ma non mi piacciono molto le shell di C quindi non uso le notazioni di shell C come source.

+0

Questo era esattamente ciò di cui avevo bisogno - grazie. upvoted –

3

Nessuno degli altri metodi ha funzionato per me [source /path/to/file vs . ./path/to/file, alias, ecc ...], fino a quando, grazie a this tutorial ho trovato che utilizzando il:

#!/usr/bin/env bash baracca

invece di il più semplice #!/usr/bin/env uno lascia passare argomenti all'interprete, che penso sia la chiave qui - vedi this document per maggiori informazioni.

In ogni caso, se i comandi di origine in qualsiasi forma, non stanno lavorando per voi, provare a controllare la vostra baracca, che potrebbe essere il problema :)

Problemi correlati