Path

如何從我的 PATH 中清除重複的條目?

  • January 19, 2014

目前,我的 $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保持目錄的順序不變。

引用自:https://unix.stackexchange.com/questions/110042