【问题标题】:How to close and reopen shell with a bash script如何使用 bash 脚本关闭和重新打开 shell
【发布时间】:2020-06-17 18:38:22
【问题描述】:

所以我正在尝试在 linux 服务器上安装 conda。为此,我以 root 用户身份运行 bash 脚本,并创建了一个将安装 conda 的新用户。新用户是“ags”。下面添加的是我的 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 在这种情况下做什么?您尝试运行的脚本还有更多内容吗?
  • 是的,之后我将创建一个新的 conda 环境并在其上安装一些服务。 Conda activate 应该只激活基础环境。
  • 在这种编程情况下,对于环境,通常最好使用a YAML environment definition,例如/data/ags/miniconda/condabin/conda env create -f environment.yaml

标签: linux bash anaconda conda restart


【解决方案1】:

Conda 将 conda activate 定义为 shell 函数,conda init 将代码放入 init 文件(此处为 .bashrc)以确保在交互 shell 会话开始时定义函数。重新启动会话的另一种方法是改用source ~/.bashrc

可能值得注意的是,在已经活动的部分中手动重新获取初始化文件的一个(通常是次要的)问题是.bashrc 中的某些代码可能是非幂等的(即多次运行它与只运行一次的效果不同)。 Fatih Arslan has a nice blog post 提供有关编写设计为幂等的 bash 脚本的提示。

【讨论】:

  • 感谢您的建议。当我作为 ags 用户在终端中时,它工作正常。但是,由于我试图以 root 身份运行整个脚本,因此出现此错误: Commad: root@my_machine:~# su - ags -c "source ~/.bashrc" Ouput: -sh: 1: source: not found @merv
猜你喜欢
  • 2018-04-17
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多