cha*_*dry 122 linux bash path environment-variables sh
我在$ 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
Run Code Online (Sandbox Code Playgroud)
我该怎么把它重置为
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)
hov*_*yan 116
你只需执行:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)
这将是当前会话,如果你想永久改变它添加到任何.bashrc,bash.bashrc,/ etc/profile - 任何适合您的系统和用户需求.
suf*_*waz 64
如果您正在使用Bash,那么如果您想要/home/wrong/dir/从PATH变量中删除目录,也可以执行以下操作:
PATH=`echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'`
Run Code Online (Sandbox Code Playgroud)
Aar*_*all 11
Linux:从$ PATH变量中删除冗余路径
Linux From Scratch 在/ 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"
}
Run Code Online (Sandbox Code Playgroud)
这是为了与这些函数一起使用以添加到路径,因此您不会冗余地执行此操作:
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"
}
Run Code Online (Sandbox Code Playgroud)
简单的用法是只提供pathremove要删除的目录路径 - 但请记住它必须完全匹配:
$ pathremove /home/username/anaconda3/bin
Run Code Online (Sandbox Code Playgroud)
这将从您的路径中删除该目录的每个实例.
如果您想要路径中的目录,但没有冗余,您可以使用其他功能之一,例如 - 对于您的具体情况:
$ pathprepend /usr/local/sbin
$ pathappend /usr/local/bin
$ pathappend /usr/sbin
$ pathappend /usr/bin
$ pathappend /sbin
$ pathappend /bin
$ pathappend /usr/games
Run Code Online (Sandbox Code Playgroud)
但是,除非可读性是关注点,否则此时您最好只做:
$ export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)
我会假设上面的工作中sh,dash以及bash至少.我会惊讶地发现它不起作用csh,fish', orksh`.我怀疑它在Windows命令shell或Powershell中是否有效.
如果您有Python,则以下类型的命令应该执行直接询问的操作(即删除冗余路径):
$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')
print(':'.join(sorted(set(path), key=path.index)))
" )
Run Code Online (Sandbox Code Playgroud)
单行(避开多行问题):
$ PATH=$( python -c "import os; path = os.environ['PATH'].split(':'); print(':'.join(sorted(set(path), key=path.index)))" )
Run Code Online (Sandbox Code Playgroud)
以上删除了以后的冗余路径.要删除早期的冗余路径,请使用反向列表的索引并再次反转:
$ PATH=$( python -c "
import os
path = os.environ['PATH'].split(':')[::-1]
print(':'.join(sorted(set(path), key=path.index, reverse=True)))
" )
Run Code Online (Sandbox Code Playgroud)
这是一个清除PATH的单行代码
/bin/awk即使PATH坏了也可以使用它
export PATH="$(echo "$PATH" |/bin/awk 'BEGIN{RS=":";}
{sub(sprintf("%c$",10),"");if(A[$0]){}else{A[$0]=1;
printf(((NR==1)?"":":")$0)}}')";
Run Code Online (Sandbox Code Playgroud)