如何使用终端命令从系统路径(“$PATH”)中删除路径?

如何使用终端命令从系统路径(“$PATH”)中删除路径?

$PATH我通过运行将目录路径添加到系统路径( ),

export PATH=$PATH:/home/avinash/Desktop/raj

现在我的路径是这样的,

$ 回显 $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/avinash/Desktop/raj

我想/home/avinash/Desktop/raj使用命令从系统路径变量中删除(就像导出命令在添加路径时所做的那样)。

答案1

在您当前的 shell 中(您当前的 gnome-terminal 会话),您可以使用以下命令执行此操作:

export PATH=${PATH%:/home/avinash/Desktop/raj}

一般来说:

${string%substring}

$substring删除来自的最短匹配后退$string

查看字符串操作了解更多信息。

答案2

运行export PATH=$PATH:/...不会设置PATH整个系统。它只是一个 shell 变量。启动一个新的 shell 并繁荣,它就消失了。显然,如果您已将其添加到~/.bashrc(或另一个环境引导文件),则必须撤消该更改,但这听起来不像是您的问题。

如果你不想启动新的 shell,可以通过手动删除它来设置它,方法是:

export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

答案3

如果你将export语句放在任何 shell 启动文件中,例如~/.bashrc,你可以在终端中使用以下命令,

#remove the export statement from the file.
sed -i 's#export PATH=$PATH:/home/avinash/Desktop/raj##g' ~/.bashrc
#source ~/.bashrc
. ~/.bashrc

它将从路径中删除该文件夹。

如果你已经从终端导出路径

只要您处于该 shell 中,文件夹就会位于路径中。要覆盖路径,您必须指定新路径。正如 oli 在另一个答案中提到的那样。

您可以使用以下命令设置旧路径

export PATH=`echo ${PATH/\:\/home\/avinash\/Desktop\/raj/}`

或者简单地

export PATH=${PATH/':/home/avinash/Desktop/raj'/}

这是子字符串替换,

${string/substring/replacement}

答案4

一个肮脏的黑客是

export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
  1. 使用以下行分隔 PATH 中的每个目录tr
  2. 使用 删除不需要的内容(与“raj”匹配的路径grep -v
  3. 使用 折叠回长“:”分隔的字符串paste

:如果 PATH 中的任何目录有或新行,则此方法可能无法正常工作

如果你发现自己经常这样做,可以考虑将其作为一个函数并保存在你的 shell 配置文件中(例如.bashrc.zshrc

# use like: rminpath "raj"
rminpath(){ export PATH="$( echo $PATH| tr : '\n' |grep -v "$1" | paste -sd: )"; }

相关内容