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


10

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

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

现在我的路是这样的

$ echo $ 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使用命令从系统路径变量中删除(就像export命令在添加path时一样)。


您在哪里放出口单?
souravc 2014年

gnome终端(ctrl + alt + t)
Avinash Raj

Answers:


14

运行export PATH=$PATH:/...不会在PATH系统范围内设置。这只是一个shell变量。启动一个新的shell和BOOM,它就消失了。显然,如果您已将其添加到~/.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

11

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

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

一般来说:

${string%substring}

删除最短匹配的$substring后面$string

查看字符串操作以获取更多信息。


2

如果要将其用作命令,请使用以下脚本:

#!/bin/bash

# This script removes folder from PATH variable
# Folders to remove reading as arguments

if [ $# -lt 1 ]; then
    echo "You should give at least one argument"
    echo "For example"
    echo "$0 /usr/local/bin"
else
    FOLDERS_TO_REMOVE=`echo $@ | sed 's/ /|/g'`

    echo "You actually PATH variable is:"
    echo $PATH
    echo "###"

    PATH=$( echo ${PATH} | tr -s ":" "\n" | grep -vwE "(${FOLDERS_TO_REMOVE})" | tr -s "\n" ":" | sed "s/:$//" )

    echo "Now you need to run"
    echo "export PATH=$PATH"
fi

为其命名unexport,并将其添加到您的PATH中。

用法:

unexport /usr/local/bin /bin /sbin

该脚本实际上不会更改您的脚本PATH。如果要脚本执行此操作,则应更改最后一行。替补echo "export PATH=$PATH"export PATH=$PATH


2

如果将export语句放入任何外壳启动文件(如)中~/.bashrc,则可以在终端中使用以下命令,

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

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

如果您已从终端导出路径

只要您在该外壳中,该文件夹就会在路径中。要覆盖路径,您必须分配新路径。正如奥利已经在其他答案中提到的那样。

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

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

或者,简单地

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

这是子字符串替换,

${string/substring/replacement}

2

一个肮脏的hack是

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: )"; }

1

export PATH=$PATH:/home/avinash/Desktop/raj (此处已将文件添加到path变量。)

echo $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

如何将其从路径中删除?只是执行

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

这是字符串替换的概念。

$ export PATH=${string/substring/replacement}

0

shell内置命令export不确定是否设置了变量,而是确定是否也在子进程中设置了变量及其值。

更改变量(导出的变量或不导出的变量)不会影响父进程或更高版本的父进程,因此,除非在脚本中运行,否则在脚本中对其进行更改均无效source

一个shell函数:

function trimpath {
    PATH=${PATH%:*}
}

将修剪PATH变量的最后一个部分。其export状态不受影响。


0

如果我没有记错,它本身将更新您想要的内容,并且完全根据您的意愿,则声明-x PATH =“ / desired / path / you_want”。[确保您以root用户身份运行,并且希望此更改影响到该用户。]再次确定,请随后运行ENV以确保$ PATH根据需要进行了有效更改。(这可用于更改在运行“ / usr / bin / env”时获得的任何输出。尽管我不知道它是否是永久性的。在这方面,请按照上述说明进行操作,并为〜/ .bashrc进行更改。它坚持)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.