在 Linux 操作系统中删除 $PATH 中的路径

Jas*_*ine 5 18.04

我的目标是安装JAVA。但我认为安装过程中出了点问题,所以我从头开始。我取消设置 JAVA_HOME 变量并试图删除路径/opt/jdk-14/bin。我尝试了一些东西,但似乎没有任何效果

sudo grep -rl "/opt/jdk-14/bin" /etc

我查了一下~/.profile, ~/.bashrc, ~/.bash_profile, /etc/bashrc。但是没有一个文件包含路径/opt/jdk-14/bin

更新

我重新安装了java。同样的路径现在重复两次。

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/jdk-14/bin:/home/dell/flutter/bin:/opt/jdk-14/bin

jar*_*rno 1

请参阅此处了解可以设置环境变量的选项。也许您可以删除那里过多的路径设置,并且您可以忽略这个答案的其余部分。

并非链接文章中提到的所有位置都允许执行脚本。但一种选择是在 /etc/profile.d/ 中创建一个文件扩展名为 .sh 的文件,并在其中添加以下脚本。这样,当桌面会话启动时,它就会在系统范围内执行:

rpath() {
    set -- $(printf '%s\n' "$@" | sed -e 's/[^^]/[&]/g' -e 's/\^/\\^/g')
    while [ "${1+x}" ]; do
        PATH=$(echo "$PATH" | sed -r -e 's#(^|:)'"$1"'/?(:|$)#\2#g' -e 's/^://')
        shift
    done
}
rpath '/opt/jdk-14/bin'
unset -f rpath
Run Code Online (Sandbox Code Playgroud)

您甚至可以为该函数提供多个参数rpath。但是,如果您在将路径添加到稍后处理的另一个文件中之前尝试删除该路径,则没有任何帮助。

学分:从此改进


Win*_*nix 0

要查找设置路径的位置,请使用:

sudo grep -rnw --exclude-dir={media,mnt,proc,root,run,sys,/tmp,tmpfs,var} '/' -e "/opt/jdk-14/bin"
Run Code Online (Sandbox Code Playgroud)

暂时删除当前会话的路径

您可以用来sed搜索不需要的路径并将其替换为空。首先查看当前的$PATH变量内容:

$ echo $PATH

/home/rick/bin:/home/rick/.local/bin:/mnt/e/bin:/mnt/e/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin::/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin
Run Code Online (Sandbox Code Playgroud)

/snap/bin:假设要删除的路径是:

$ NewPath=$(echo "$PATH" | sed 's#/snap/bin:##')
Run Code Online (Sandbox Code Playgroud)

现在看看新路径是什么样子的:

$ echo $NewPath

/home/rick/bin:/home/rick/.local/bin:/mnt/e/bin:/mnt/e/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games::/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin
Run Code Online (Sandbox Code Playgroud)

如果您喜欢所看到的内容,最后一步就是使用PATH=$NewPath