我在$ 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
答案 0 :(得分:107)
您只需执行:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
适用于当前会话,如果您想要永久更改,请将其添加到任何.bashrc,bash.bashrc,/ etc / profile - 无论您的系统和用户需求是什么。
答案 1 :(得分:62)
如果您正在使用Bash,那么,如果您要从/home/wrong/dir/
变量中删除目录PATH
,也可以执行以下操作:
PATH=`echo $PATH | sed -e 's/:\/home\/wrong\/dir\/$//'`
答案 2 :(得分:14)
如果您需要在脚本运行之前从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
答案 3 :(得分:10)
Linux:从$ PATH变量
中删除冗余路径
Linux From Scratch有function in /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命令shell或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)))
" )
答案 4 :(得分:7)
这是一个清理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)}}')";
答案 5 :(得分:2)
在bash中你只需$ {var / find / replace}
PATH=${PATH/%:\/home\/wrong\/dir\//}
或者在这种情况下(因为替换位为空)只是:
PATH=${PATH%:\/home\/wrong\/dir\/}
我是第一次来到这里,但是因为我认为会有parameter expansion来做这件事。比sed更容易!。
How to replace placeholder character or word in variable with value from another variable in Bash?
答案 6 :(得分:2)
如果您只想删除任何重复的路径,我会使用一段时间后写的这个脚本,因为我在使用多个perl5 / bin路径时遇到了麻烦:
\0
最后我将它放在我的〜/ .profile中。由于我几乎只使用BASH,所以我没有在其他Shell中尝试过。
答案 7 :(得分:1)
对于简单的复制粘贴模板,我使用此Perl代码段:
PATH=`echo $PATH | perl -pe s:/path/to/be/excluded::`
这样您就不需要为替换运算符转义斜杠。
答案 8 :(得分:1)
echo $PATH
PATH= # pass new list of entries
答案 9 :(得分:0)
您是如何将这些重复路径添加到PATH变量的?您必须已编辑了.
个文件。 (.tcshrc
或.bashrc
等,具体取决于您的特定系统/ shell)。修复它的方法是再次编辑文件并删除重复的路径。
如果您没有编辑任何文件,那么您必须以交互方式修改PATH。在这种情况下,更改不会“粘住”,即如果您打开另一个shell,或者注销并重新登录,更改将自动消失。
请注意,也有一些系统范围的配置文件,但您不太可能修改它们,因此很可能您将更改个人主目录中的文件(如果您希望在更新设置后永久更改这些文件)路径)
答案 10 :(得分:0)
假设您的shell是Bash,您可以使用
设置路径export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
但是像Levon在另一个回答中所说的那样,一旦你终止shell,改变就会消失。您可能希望在PATH
或~/.bash_profile
设置~/.bashrc
。
答案 11 :(得分:0)
没有标准工具可以“编辑”$PATH
的值(即“仅在文件夹尚不存在时添加文件夹”或“删除此文件夹”)。
要检查下次登录时的路径,请使用telnet localhost
(或telnet 127.0.0.1
)。然后它会询问您的用户名和密码。
这为您提供了一个新的登录shell(即一个不会从当前环境继承任何内容的全新登录shell)。
您可以检查$PATH
的值并编辑您的rc文件,直到它正确为止。这对于在更改重要文件后是否可以再次登录也很有用。
答案 12 :(得分:0)
PATH = int input;
std::cin >> input;
if ("max" > input && input > "min")
{
//what you want to do
}
else{
//error handling
}