Вызывающий источник conda активируется с bash script

Я пытаюсь активировать свою консоль env через bash script. Несмотря на то, что script работает нормально, и мой PATH, кажется, изменяется в script, он получает reset как-то после завершения script. Я могу вызвать source activate test из строки cmd, и он отлично работает. Пример с выходом ниже.

script:

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

выход:

./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`

но если я echo $PATH после завершения script, вы можете видеть, что $PATH не изменился (т.е. no /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

Ответ 1

Я нашел следующее для работы на Mac OSX с оболочкой bash:

#!/bin/bash
source /Users/yourname/anaconda/bin/activate your_env
python --version # example way to see that your virtual env loaded as expected

Убедитесь, что вы выполнили исполняемый файл со скриптом:

chmod +x yourscript.bash

Ответ 2

См. ссылку ниже,

digitalocean-how-to-read-and-set-environment-and-shell-variables-on-a-linux-vps

ниже - фрагмент с веб-сайта,

Это связано с тем, что переменные среды передаются только потом процессы. Существует не встроенный способ переменные родительской оболочки. Это хорошо в большинстве случаев и предотвращает программ, влияющих на операционную среду, из которой они были называется.

Ответ 3

На более поздних версиях conda (4. 6+) я заметил, что работает следующее:

eval "$(conda shell.bash hook)"
conda activate <env-name>