如何使用Bash脚本关闭和重新打开shell

4

我想在Linux服务器上安装conda。为此,我正在以root用户身份运行bash脚本,并创建了一个新用户ags来安装conda。以下是我的shell脚本中的行:

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

然而,我的输出要求我重新启动shell:
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


有没有一种方法可以重新启动我的 shell(ags),并在此之后仍然保持脚本运行?

在这种情况下,你期望 conda activate 做什么?你尝试运行的脚本还有更多内容吗? - merv
是的,在此之后,我将创建一个新的conda环境并在其中安装一些服务。Conda activate应该只激活基本环境。 - vc2310
在这种编程情况下,最好使用YAML环境定义来创建环境,例如/data/ags/miniconda/condabin/conda env create -f environment.yaml - merv
1个回答

3
Conda将conda activate定义为一个shell函数,conda init将代码放在初始化文件(此处为.bashrc)中,以确保该函数在交互式shell会话开始时被定义。重新启动会话的替代方法是使用source ~/.bashrc

值得注意的是,在已经激活的部分中手动重新资源初始化文件的(通常是次要的)问题是,.bashrc中的某些代码可能是非幂等的(即,多次运行它具有不同于仅运行一次的效果)。Fatih Arslan发表了一篇很好的博客文章,介绍了设计为幂等的bash脚本的技巧。

3
谢谢您的建议。当我以ags用户身份在终端中运行时,它可以正常工作。但是,由于我正在尝试以root身份运行整个脚本,因此我遇到了这个错误:命令:root@my_machine:~# su - ags -c "source ~/.bashrc"输出:-sh: 1: source: not found @merv - vc2310

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接