在 eval“$(conda shell.bash hook)”之后将参数传递给 bash 命令?

Passing arguments to bash command after eval "$(conda shell.bash hook)"?

在从 bash 脚本创建 conda 环境并在其中 运行 一些 python 代码时,我在将变量传递给命令时遇到了一些困难。

示例 1

这是有效的硬编码命令。

eval "$(conda shell.bash hook)"
cd some-repository && conda deactivate && conda activate some-environment && python -m code.project1.src --some-arg

MWE

下面是一个不处理命令中的变量的例子:

# bash -c "some_test"
some_test() {
    echo "PWD=$PWD"
    eval "$(conda shell.bash hook && export env_var=some-dir)"
    cd $env_var
    echo "PWD=$PWD"
}

输出:

PWD=/home/name/git/some-repo
PWD=/home/name

问题

如何将变量传递给在 eval "$(conda shell.bash hook)" 之后执行的命令?

eval "$(command)" 执行命令行的输出。所以需要输出变量赋值,而不是在命令中执行。

您正在 $() 的子 shell 中执行变量赋值,因此它的 none 变量赋值持续到调用 shell.

eval "$(conda shell.bash hook && echo export env_var=some-dir)"

但我不确定您为什么需要在 $() 中执行此操作。你可以只写

eval "$(conda shell.bash hook)"
export env_var=some-dir