在一个进程中从bash脚本运行两个命令(conda)

时间:2020-04-24 14:48:41

标签: linux bash conda

我正在尝试编写一个bash脚本,其中包括停用和删除conda环境。这是一个示例,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有关-本质上,环境在一个进程中被停用,但是remove调用在另一个未禁用环境的进程中运行。但是我不确定。

一些注意事项:

  • 我无法使用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
  • 我在conda activate my_env中调用命令~./bashrc
  • 我不能使用别名-它必须是bash脚本

2 个答案:

答案 0 :(得分:0)

感谢乔纳森(Jonathan)在评论中的回答。你是完全正确的,我完全忽略了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有无参数都可以。

答案 1 :(得分:0)

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

#!/usr/bin/env conda run bash

conda env remove -n my_env -y
相关问题