【问题标题】:Running two commands from bash script in one process (conda)在一个进程中从 bash 脚本运行两个命令(conda)
【发布时间】:2026-01-14 18:25:02
【问题描述】:

我正在尝试编写一个包含停用和删除 conda 环境的 bash 脚本。这是一个例子,remove_env.sh:

#!/bin/bash

# Get the conda command available in bash
eval "$(conda shell.bash hook)"

# Deactivate environment
conda deactivate

# Remove environment
conda remove --name my_env --all --yes

必须停用环境才能将其移除。

很遗憾,这不起作用。我在终端中执行此操作:

$ conda activate my_env
$ ./remove_env.sh

CondaEnvironmentError: cannot remove current environment. deactivate and run conda remove again

我认为这个问题与forking 有关 - 本质上,环境在一个进程中被停用,但随后删除调用在另一个进程中运行,该进程没有停用环境。但我不完全确定。

一些注意事项:

  • 我不能使用source remove_env.sh - 我必须能够使用./remove_env.sh
  • 我试过这个没有成功:
#!/bin/bash

# Get the conda command available in bash
eval "$(conda shell.bash hook)"

# Deactivate and remove environment
conda deactivate && conda remove --name my_env --all --yes
  • 我在~./bashrc 中调用命令conda activate my_env
  • 我不能使用别名 - 它必须是 bash 脚本

【问题讨论】:

  • Deactivating an environment 上的手册没有帮助吗?看起来您应该在删除活动环境之前使用 conda activate(不带参数)激活默认环境。

标签: linux bash conda


【解决方案1】:

感谢 Jonathan 在 cmets 中的回答。你完全正确,我完全忽略了 conda 手册中的那个蓝色注释。我能够做到这一点:

#!/bin/bash

# Get the conda command available in bash
eval "$(conda shell.bash hook)"

# Activate the environment
conda activate my_env

# Deactivate environment
conda deactivate

# Remove environment
conda remove --name my_env --all --yes

我认为无论你 conda activate 有无参数都有效。

【讨论】:

    【解决方案2】:

    或者,使用 Conda 的 run 工具,可以避免手动激活。也就是说,像

    #!/usr/bin/env conda run bash
    
    conda env remove -n my_env -y
    

    【讨论】: