我有一个构建脚本来运行一个简单的 python 应用程序。我正在尝试将其设置为任何已安装 conda 并在其 PATH 中的用户都可以运行它。没有其他先决条件。我已经基本完成了这一点,但希望提高回访用户的效率。
构建运行.sh
conda init bash
conda env create --name RUN_ENV --file ../run_env.yml -q --force
conda activate RUN_ENV
python run_app.py
conda deactivate
Run Code Online (Sandbox Code Playgroud)
我想让脚本检查 RUN_ENV 是否已经存在并激活它,而不是每次都强制创建它。我试过
ENVS=$(conda env list | awk '{print }' )
if [[ conda env list = *"RUN_ENV"* ]]; then
conda activate RUN_ENV
else
conda env create --name RUN_ENV --file ../run_env.yml -q
conda activate RUN_ENV
exit
fi;
python run_app.py
conda deactivate
Run Code Online (Sandbox Code Playgroud)
但它总是返回 false 并尝试创建 RUN_ENV
更新2022
我最近一直收到点赞。所以我要强调的是,这种方法总体上并不是原生的“conda”,并且可能不是最好的方法。就像我最初所说的,我不使用 conda。请酌情采纳我的建议。
相反,请参阅@merv 在建议使用该--prefix标志的问题中的评论
另外请查看文档以获取更多详细信息
注意:您始终可以在 bash 脚本中使用一个函数,通过非常具体的标志来重复命令调用
例如
function PREFIXED_CONDA(){
action=${1};
# copy $1 to $action;
shift 1;
# delete first argument and shift remaining indeces to the left
conda ${action} --prefix /path/to/project ${@}
}
Run Code Online (Sandbox Code Playgroud)
我不确定如何conda env list工作(我不使用 Anaconda);你当前的if测试很模糊
但我冒险猜测这就是你要找的
#!/usr/bin/env bash
# ...
find_in_conda_env(){
conda env list | grep "${@}" >/dev/null 2>/dev/null
}
if find_in_conda_env ".*RUN_ENV.*" ; then
conda activate RUN_ENV
else
# ...
Run Code Online (Sandbox Code Playgroud)
您也可以这样做,而不是将其放入单独的函数中
# ...
if conda env list | grep ".*RUN_ENV.*" >/dev/null 2>&1; then
# ...
Run Code Online (Sandbox Code Playgroud)
如果您使用命令分组,则会获得整洁和清晰的加分
# ...
if { conda env list | grep 'RUN_ENV'; } >/dev/null 2>&1; then
# ...
Run Code Online (Sandbox Code Playgroud)
if只需检查退出代码即可。只要至少有一个与所提供的模式匹配,就会以(成功)退出grep;0这在以下情况下评估为“true”if这在声明
(grep即使模式只是“RUN_ENV”,也会匹配并成功;))
awk的部分实际上ENVS=$(conda env list | awk '{print }' )什么也不做。我希望输出采用表格格式,但{print }不进行过滤,我相信您正在寻找{print $n}列n号或awk /PATTERN/ {print}模式可能在哪里RUN_ENV,并且仅打印具有模式的行。
但即便如此,将表存储在字符串变量中也会很混乱。你可能想要一个数组。
然后来到你的if- 条件,它在语法上是明显错误的。
[[构造用于比较值:整数、字符串、正则表达式=有一个命令conda env list
$ENVS[[ "${ENVS}" == *"RUN_ENV"* ]]
[[ $(conda env list) == *"RUN_ENV"* ]][[ ${value} =~ /PATTERN/ ]]| 归档时间: |
|
| 查看次数: |
11143 次 |
| 最近记录: |