如何动态删除当前shell中的env变量?

问题描述 投票:0回答:1

我已经在我的系统上安装了 miniconda,它创建了各种环境变量。这会导致系统路径和 conda 路径中的二进制文件和库的路径重复。这对我来说不是问题。但是,当我尝试编译某些库时,它会从 conda 路径而不是系统变量中获取二进制文件或库。这会导致编译错误。

这是我在环境中的内容:

PATH=/home/sundar/miniconda3/bin:/home/sundar/miniconda3/condabin:/home/sundar/.rvm/gems/ruby-3.1.2/bin:/home/sundar/.rvm/gems/ruby-3.1.2@global/bin:/home/sundar/.rvm/rubies/ruby-3.1.2/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/sundar/.rvm/bin:/home/sundar/.rvm/bin:/home/sundar/.local/bin
CONDA_EXE=/home/sundar/miniconda3/bin/conda
_CE_CONDA=
CONDA_PYTHON_EXE=/home/sundar/miniconda3/bin/python
CONDA_SHLVL=1
CONDA_PREFIX=/home/sundar/miniconda3
CONDA_DEFAULT_ENV=base
CONDA_PROMPT_MODIFIER=(base) 
GSETTINGS_SCHEMA_DIR_CONDA_BACKUP=
GSETTINGS_SCHEMA_DIR=/home/sundar/miniconda3/share/glib-2.0/schemas
XML_CATALOG_FILES=file:///home/sundar/miniconda3/etc/xml/catalog file:///etc/xml/catalog
PROJ_DATA=/home/sundar/miniconda3/share/proj

我想从终端删除所有与“conda”关键字dynamicall匹配的路径。我不想从

~/.bashrc
或个人资料文件中删除。

我知道以下命令可以解决问题:-

export PATH=${PATH/'/path/to/be/removed/'/}

但我想让它动态化,以便它可以在任何系统中使用,而不是特定于我的系统。由于我将在编译过程中使用 bash,因此我可以使用此技术在继续之前取消设置变量并避免编译错误。

编辑1

我最终想要的是例如下面的 PATH 变量

PATH=/home/sundar/miniconda3/bin:/home/sundar/miniconda3/condabin:/home/sundar/.rvm/gems/ruby-3.1.2/bin:/home/sundar/.rvm/gems/ruby-3.1.2@global/bin:/home/sundar/.rvm/rubies/ruby-3.1.2/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/sundar/.rvm/bin:/home/sundar/.rvm/bin:/home/sundar/.local/bin

应该改为

PATH=/home/sundar/.rvm/gems/ruby-3.1.2/bin:/home/sundar/.rvm/gems/ruby-3.1.2@global/bin:/home/sundar/.rvm/rubies/ruby-3.1.2/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/home/sundar/.rvm/bin:/home/sundar/.rvm/bin:/home/sundar/.local/bin

您可以看到目录

/home/sundar/miniconda3/bin:/home/sundar/miniconda3/condabin
的路径已从
$PATH
中删除。

此外,不需要设置对 conda 或 CONDA 变量的任何引用。最后,最终目标是从环境变量中删除任何包含“miniconda3”的文件/目录路径。

bash compilation environment-variables conda
1个回答
0
投票

我最终想要的是例如下面的 PATH 变量

要删除

:
中包含字符串
PATH
的所有
conda
分隔元素,我会懒洋洋地这样做:

PATH=$(<<<"$PATH" tr ':' '\n' | grep -v conda | tr '\n' ':')

但是为了没有错误,我宁愿选择一些东西:

newpath=""
while IFS= read -r -d: path; do
    case "$i" in
    *conda*) ;;
    *) newpath+="${newpath:+:}$i"
    esac
done < <(printf "%s" "$PATH")
export "PATH=$newpath"

不需要设置对 conda 或 CONDA 变量的任何引用

要删除名称中包含 CONDA 的所有变量,您可以这样做:

 unset $(compgen -v | grep CONDA)
© www.soinside.com 2019 - 2024. All rights reserved.