27在您当前的shell(gnome-terminal的当前会话)中,您可以使用以下方法来实现:
export PATH=${PATH%:/home/avinash/Desktop/raj}
总的来说:
${string%substring}
从$string的后面删除最短匹配的$substring。
更多信息请查看字符串操作。
- Radu Rădeanu回答链接24运行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
- Oli回答链接6如果你将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}
- sourav c.回答链接4如果你想将其用作命令,这里有一个小脚本:
#!/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
- c0rp回答链接3一个不正当的技巧是
export PATH="$( echo $PATH| tr : '\n' |grep -v raj | paste -s -d: )"
将您的PATH中的每个目录使用tr命令分行分隔开来。
使用grep -v删除您不想要的内容(路径匹配"raj"),
然后使用paste将其合并回一个长的以":"分隔的字符串。
如果PATH中的任何目录包含:或换行符,这可能无法正常工作。
如果您发现自己经常这样做,请考虑将其制作成一个函数并保存在您的shell配置文件中(例如.bashrc、.zshrc)。
# use like: rminpath "raj"
rminpath(){ export PATH="$( echo $PATH| tr : '\n' |grep -v "$1" | paste -sd: )"; }
- Will回答链接1export 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
怎样从路径中移除它?
只需执行即可。
$ export PATH=${PATH/'/home/avinash/Desktop/raj'/}
这是一个字符串替换的概念。
$ export PATH=${string/substring/replacement}
- Shalom Alexander回答链接0shell内置命令export并不确定变量是否已设置,它确定变量及其值是否在子进程中也被设置。
无论变量是否被导出,改变变量的值都不会影响父进程或更高级别的进程,因此除非使用source运行脚本,否则在脚本中对变量的更改没有效果。
一个shell函数:
function trimpath {
PATH=${PATH%:*}
}
将会去掉PATH变量的最后一个组件。其"export"状态不受影响。
- David Ledger回答链接0我只是简单地使用sed,就像这样
PATH=$(sed "s/\/home\/avinash\/Desktop\/raj//" <<< $PATH)
这应该能解决问题。
简单解释一下这个工作原理:
首先,我们定义变量值设置为PATH=,然后我们必须使用$(command)将下一个命令的结果值作为该变量的值,接着是SED命令sed "s///",/将成为该命令的分隔符,默认情况下我们使用/,但你可以设置任何字符,如-或_。第一个s用于替换,然后是第一个分隔符,接着是要查找的表达式,然后是另一个分隔符,再接着是要替换第一个表达式(你要查找的那个)的表达式,最后是另一个分隔符,并且你可以使用一些参数,如g,进行全局替换。反斜杠\是转义字符,用于让sed理解下一个/是字面意义上的字符而不是分隔符。三个小于号<<<用于将变量传递给sed命令。
- Gabriel de Lima回答链接0declare -x PATH="/desired/path/you_want" 如果我没记错的话,这将会更新你想要的内容,并且完全取决于你的意愿。[确保以root用户和你想要影响的目标用户身份运行] 为了确保,之后运行ENV命令来确认$PATH是否被有效地修改成你想要的样子。(这适用于修改当你运行'/usr/bin/env'时得到的任何输出。虽然我不知道它是否是永久性的。在这方面,按照上述说明修改~/.bashrc文件使其生效)
- Jake Baldwin回答链接