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

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

提问人:a.t. 提问时间:2/26/2022 更新时间:2/26/2022 访问量:938

问:

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

示例 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)"

bash shell 参数传递 conda

评论

1赞 merv 2/27/2022
该命令用于交互式 shell 会话 - 而不是这样的情况。请改用。基本上,整个事情可以通过以下方式完成:conda activateconda runconda run -n some-environment python -m code.project1.src --some-arg

答:

2赞 Barmar 2/26/2022 #1

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

您正在 的子 shell 中执行变量赋值,因此其变量赋值不会保留到调用 shell 中。$()

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

但我不确定为什么你需要在 .你可以写$()

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