Path
如何從我的 PATH 中清除重複的條目?
目前,我的 $PATH 有兩個相同的條目
/usr/local/bin
,我很好奇是否有辦法清理它,或者我是否不應該擔心它。它看起來像這樣(分解成一個可讀的列表):/Users/myself/.rvm/gems/ruby-2.0.0-p353/bin /Users/myself/.rvm/gems/ruby-2.0.0-p353@global/bin /Users/myself/.rvm/rubies/ruby-2.0.0-p353/bin /usr/local/bin <--( Here ) /usr/bin /bin /usr/sbin /sbin /usr/local/bin <--( Here ) /opt/X11/bin /usr/texbin /Users/myself/.rvm/bin
一種方法,就是重新定義你的路徑
export PATH=/Users/myself/.rvm/gems/ruby-2.0.0-p353/bin: /Users/myself/.rvm/gems/ruby-2.0.0-p353@global/bin: /Users/myself/.rvm/rubies/ruby-2.0.0-p353/bin: /usr/local/bin: /usr/bin: /bin /usr/sbin: /sbin: /opt/X11/bin: /usr/texbin: /Users/myself/.rvm/bin:
(您需要將所有這些放在一行中。)
儘管定義了兩次路徑不會有任何傷害。修復它取決於你的強迫症程度。
要使這種情況在重新啟動和新終端視窗中持續存在,您需要修改啟動腳本(~/.profile、~/.bashrc、/etc/environment)
這是因為您在某處修改了某些內容併兩次添加了相同的路徑。我通過使用一個不錯的小功能來避免這種情況,請修改我
$PATH
的,如果該目錄尚不存在,則只會添加一個目錄:pathmunge () { if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then if [ "$2" = "after" ] ; then PATH=$PATH:$1 else PATH=$1:$PATH fi fi }
我在我的
.profile
文件中有這個函式並將我的路徑定義為:pathmunge $HOME/bin pathmunge $HOME/scripts export PATH
只需瀏覽您的 shell 初始化文件並使用此方法來避免重複。
如果您只想快速刪除現有的欺騙,請執行以下操作:
PATH=$(echo $PATH | tr ':' '\n' | perl -lne 'chomp; print unless $k{$_}; $k{$_}++' | tr '\n' ':' | sed 's/:$//')
我使用
perl
而不是sort -u
保持目錄的順序不變。