我已经定义在$ PATH变量6次相同的路径。
我没有注销,以检查它是否工作。
我怎样才能删除重复?
$ PATH变量看起来是这样的:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin:/home/flacs/Programmes/USFOS/bin
我怎么会重置为刚
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
您只需执行:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
这将是当前会话中,如果你想改变永久将其添加到任何的.bashrc,bash.bashrc,/ etc / profile文件 - 任何适合您的系统和用户的需求。
如果你正在使用bash,你也可以做,如果下面,让我们说,你要删除的目录/home/wrong/dir/
从你的PATH
变量:
PATH=`echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'`
如果您需要从删除路径PATH
变量之前,你的脚本运行它添加到脚本的开头:
PATH=$(echo $PATH | sed -e 's;:\?/home/user/bin;;' -e 's;/home/user/bin:\?;;')
如果你需要,你可以在列表与前重新添加它:
PATH=/home/user/bin:$PATH
或者你可以在列表与结束重新添加它:
PATH=$PATH:/home/user/bin
Linux的:删除$ PATH变量的冗余路径
从头Linux有这个在/ etc / profile文件功能
# Functions to help us manage paths. Second argument is the name of the
# path variable to be modified (default: PATH)
pathremove () {
local IFS=':'
local NEWPATH
local DIR
local PATHVARIABLE=${2:-PATH}
for DIR in ${!PATHVARIABLE} ; do
if [ "$DIR" != "$1" ] ; then
NEWPATH=${NEWPATH:+$NEWPATH:}$DIR
fi
done
export $PATHVARIABLE="$NEWPATH"
}
这是为了与这些功能用于添加到路径,让你不这样做冗余:
pathprepend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}"
}
pathappend () {
pathremove $1 $2
local PATHVARIABLE=${2:-PATH}
export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1"
}
简单的用法是只给pathremove
的目录路径删除-但请记住,它必须完全匹配:
$ pathremove /home/username/anaconda3/bin
这将从路径中删除该目录的每个实例。
如果你想在你的路径的目录,但没有裁员,你可以只使用的其他功能之一,例如: - 为您的具体情况:
$ pathprepend /usr/local/sbin
$ pathappend /usr/local/bin
$ pathappend /usr/sbin
$ pathappend /usr/bin
$ pathappend /sbin
$ pathappend /bin
$ pathappend /usr/games
但是,除非可读性的关注,在这一点上你关闭只是做的更好:
$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
就已知的所有炮弹上面工作的人吗?
我敢在工作上面sh
, dash
和bash
至少。 我会很惊讶地得知它不工作csh
, fish', or
ksh`。 我怀疑它会在Windows命令外壳或PowerShell的工作。
如果你有Python中,以下命令的排序应该做的是什么,直接问(即去掉冗余路径):
$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')
print(':'.join(sorted(set(path), key=path.index)))
" )
一个班轮(回避多的问题):
$ PATH=$( python -c "import os; path = os.environ['PATH'].split(':'); print(':'.join(sorted(set(path), key=path.index)))" )
上述去除后的冗余路径。 删除早期冗余路径,使用逆转名单的指数,并再次扭转这种局面:
$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')[::-1]
print(':'.join(sorted(set(path), key=path.index, reverse=True)))
" )
在bash你根本就$ {VAR /查找/替换}
PATH=${PATH/%:\/home\/wrong\/dir\//}
或者,在这种情况下(如替换位是空的)只是:
PATH=${PATH%:\/home\/wrong\/dir\/}
我来这里是第一,但去其他洁具,因为我以为会有一个参数展开做到这一点。 更容易比sed的!
如何从猛砸另一个变量与值替换占位符或文字的变量?
如果你只是想删除任何重复的路,我用这个剧本我写了一段时间后,因为我是在以多的perl5 / bin的路径的麻烦:
#!/bin/bash
#
# path-cleanup
#
# This must be run as "source path-cleanup" or ". path-cleanup"
# so the current shell gets the changes.
pathlist=`echo $PATH | sed 's/:/\n/g' | uniq`
# echo "Starting PATH: $PATH"
# echo "pathlist: $pathlist"
unset PATH
# echo "After unset, PATH: $PATH"
for dir in $pathlist
do
if test -d $dir ; then
if test -z $PATH; then
PATH=$dir
else
PATH=$PATH:$dir
fi
fi
done
export PATH
# echo "After loop, PATH: $PATH"
我把它放在我的〜/ .profile文件结尾。 由于我使用bash几乎完全,我还没有在其他炮弹尝试过。
对于一个简单的复制粘贴模板,我用这个Perl的片段:
PATH=`echo $PATH | perl -pe s:/path/to/be/excluded::`
这样,你不需要逃避替代运营商的斜线。
假设你的shell是bash,可以设置与路径
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
但像列翁的另一种回答说,只要你终止Shell的变化将会消失。 你可能想设置你的PATH
中~/.bash_profile
或~/.bashrc
。
有没有标准的工具,“编辑”的价值$PATH
(即“添加文件夹,只有当它不已经存在”或“删除此文件夹”)。
要检查,当你登录下次使用路径会是怎样telnet localhost
(或telnet 127.0.0.1
)。 然后,它会询问您的用户名和密码。
这给你一个新的登录shell(即一个完全新的,不从当前环境继承任何东西)。
您可以检查的价值$PATH
那里,编辑您的rc文件,直到它是正确的。 这也是有用的,看看你是否能再次在所有作出改变的重要文件后登录。
你是如何添加到您的PATH变量这些重复的路径? 你必须编辑你的一个.
文件。 ( .tcshrc
,或.bashrc
,等这取决于您的特定系统/壳)。 解决它的方法是重新编辑该文件并删除重复的路径。
如果没有编辑任何文件,你必须以交互方式修改的路径。 在这种情况下,变化不会“大棒”,也就是说,如果你打开另一个shell,或注销并重新登录,更改将自动消失。
请注意,有一些系统范围的配置文件了,但它不太可能你修改过的,所以很有可能你会在你的个人主页目录修改文件(如果你想使这些更改永久,一旦你看中一组路径)