繁体   English   中英

安装 conda 的 Bash 脚本会导致“conda: command not found”,除非我之后在命令行运行 `bash`

[英]Bash script to install conda leads to "conda: command not found" unless I run `bash` at the command line afterwards

我正在尝试编写一个脚本来安装 miniConda,然后激活一个 conda 环境。

这是代码的相关部分:

if ! command -v conda --version &> /dev/null
then
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O conda.sh
    bash conda.sh -b -p ~/local/miniconda3
    rm -f conda.sh
    ~/local/miniconda3/bin/conda init bash
    . ~/.bashrc
fi
conda config --set auto_activate_base false

conda create -yn my_env
eval "$(conda shell.bash hook)"
conda activate my_env

当我运行脚本时,终端上的输出看起来好像 conda 已成功安装。 我收到一长串消息,在阅读完所有消息后,似乎一切都成功了。 (它类似于Solving environment: done ,如果有帮助的话)。

但是,当我在终端上运行conda --version以测试是否安装了 conda 时,出现错误conda: command not found

如果我遵循这个StackOverflow 答案并在我的终端中输入bash ,然后从那里运行conda --version ,我可以让conda --version按预期工作。

我已经阅读了很多关于 shell 和 subshel​​l 以及它们与 conda 的关系的答案。 我有一个模糊的想法,即我的问题与在子 shell 中执行的某些事情(?)有关,而不是在父 shell(?)中执行,并且可能与采购~/.bashrc错误(?)有关。 不过,我需要一些有关细节的主要指示。

对于无法提出更好的问题,我深表歉意。 如果我对要问的问题有更具体的想法,我会用谷歌搜索。 :)

注意:我的脚本中的一些内容(如~/local/miniconda3/bin/conda init bash; . ~/.bashrc )是从其他 StackOverflow 答案中复制的。 我非常仔细地阅读了对这些 SO 问题的解释,但不幸的是,我并没有得到比“如果你这样做就有效”的一般想法更多的东西。 如果有人回答也能解释这些台词是否与我的问题有关,那就太好了。

可能安装脚本正在向 $PATH 添加某些内容,并且在重新启动 shell 或重新获取配置文件之前不会拾取此内容。 您可以在脚本末尾尝试exec $SHELL以生成一个新的 shell,它将接收此类更改。

更新用户的PATH您可能需要运行hash -r conda来更新 Bash 的内部命令查找缓存。

简而言之,您的安装程序无法更新当前的 shell,除非您要求用户提供它的source ,或者eval它打印的任何内容。 也许组织它做前者,但封装后者。

echo 'PATH=$PATH:/blah-blah' >>~/.bashrc
eval "$(tail -n 1 ~/.bashrc; echo 'hash -r conda')"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM