Как закрыть и снова открыть оболочку с помощью скрипта bash - PullRequest
0 голосов
/ 17 июня 2020

Итак, я пытаюсь установить conda на сервер linux. Для этого я запускаю сценарий bash как пользователь root и создал нового пользователя, который собирается установить conda. Новый пользователь - «ags». Ниже добавлены строки из моего сценария оболочки.

echo "Getting the conda installer"
su - ags -c "wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /${install_directory}/ags/miniconda.sh"
echo "Installing conda"
su - ags -c "bash /${install_directory}/ags/miniconda.sh -b -p /${install_directory}/ags/miniconda"


###ERROR PART UNDERNEATH ####
su - ags -c "/${install_directory}/ags/miniconda/condabin/conda init bash"

su - ags -c "export ARCGISHOME=/${install_directory}/ags/arcgis/server; conda activate

Однако мой вывод просит меня перезапустить оболочку:

root@my_server:~# su - ags -c "/data/ags/miniconda/condabin/conda init bash"
no change     //data/ags/miniconda/condabin/conda
no change     //data/ags/miniconda/bin/conda
no change     //data/ags/miniconda/bin/conda-env
no change     //data/ags/miniconda/bin/activate
no change     //data/ags/miniconda/bin/deactivate
no change     //data/ags/miniconda/etc/profile.d/conda.sh
no change     //data/ags/miniconda/etc/fish/conf.d/conda.fish
no change     //data/ags/miniconda/shell/condabin/Conda.psm1
no change     //data/ags/miniconda/shell/condabin/conda-hook.ps1
no change     //data/ags/miniconda/lib/python3.7/site-packages/xontrib/conda.xsh
no change     //data/ags/miniconda/etc/profile.d/conda.csh
modified      //data/ags/.bashrc

==> For changes to take effect, close and re-open your current shell. <==

root@my_server:~# su - ags -c "conda activate"
-sh: 1: conda: not found

Есть ли способ перезапустить моя оболочка (ags) и после этого скрипт все еще будет работать?

1 Ответ

0 голосов
/ 17 июня 2020

Conda определяет conda activate как функцию оболочки, а conda init помещает код в файлы инициализации (здесь .bashrc), чтобы гарантировать, что функция будет определена в начале сеансов оболочки взаимодействия. Альтернативой перезапуску сеанса является использование source ~/.bashrc.

. Возможно, стоит отметить, что (обычно незначительная) проблема с ручным повторным поиском файла инициализации в уже активном разделе заключается в том, что часть кода в .bashrc может быть неидемпотентным (т. е. многократное выполнение имеет иной эффект, чем однократный). У Фатиха Арслана есть хорошая запись в блоге с советами по написанию bash скриптов, идемпотентных по своему замыслу.

...