2015-12-30 11 views
7

Sto provando ad attivare il mio conda env tramite uno script di bash. Anche se lo script funziona correttamente e il mio PATH sembra essere cambiato all'interno dello script, viene ripristinato in qualche modo dopo che lo script termina. Posso chiamare source activate test dalla riga cmd e funziona perfettamente. Un esempio insieme all'output qui sotto.chiamando la sorgente di conda attiva da script di bash

script:

PycharmProjects/test » cat ./example.sh echo "before calling source: $PATH" source activate test echo "after calling source: $PATH"

uscita:

./example.sh 
before calling source: /Use rs/me/miniconda3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin 

discarding /Users/me/miniconda3/bin from PATH 
prepending /Users/me/miniconda3/envs/test/bin to PATH 

after calling source: /Users/me/miniconda3/envs/test/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin` 

ma se echo $PATH dopo lo script termina, si può vedere che la $PATH non è cambiato (cioè non /Users/me/miniconda3/envs/test/bin):

PycharmProjects/test » echo $PATH /Users/me/miniconda3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin

+0

'echo $ PATH' ** dove ** lo dice? Stai eseguendo 'example.sh' come uno script stesso (ad esempio'./Example.sh')? Invece di 'source'ing it (ad esempio' source example.sh')? –

+0

in esecuzione 'example.sh' come script (./example.sh). Ho chiamato 'echo $ PATH' dopo che lo script ha finito di funzionare, solo per mostrare $ PATH non è effettivamente cambiato. –

+2

Eseguendolo come uno script, le modifiche si interrompono con la shell che esegue lo script. Ecco perché è necessario "dare origine" allo script attivo per farlo applicare allo script/shell in esecuzione. –

risposta