2013-12-20 120 views
1

我希望能夠重新加載用戶.profile,以便「永久」更新PATH而不必重新啓動系統。這正是我在.profile文件中所做的,並且不起作用。如何檢查PATH是否已包含特定目錄

if [[$PATH != "*path_to_directory*"]];then 
    PATH=<path_to_directory>:$PATH 
fi 

後,我保存除了.profile文件,我運行源.profile文件重新加載它,但我只是得到一個錯誤,我的道路不會被更新。

+1

而你得到了什麼錯誤 – Kevin

回答

1

你有2個問題,你的發言。首先,您需要在[[之後和]]之前添加空格。其次,*應在報價之外爲它匹配字符串:

if [[ $PATH != *"path_to_directory"* ]];then 
    echo "adding path to directory" 
    PATH=path_to_directory:$PATH 
fi 

這樣的結果應該是:

$ echo $PATH 
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin 
$ source .profile 
adding path to directory 
$ echo $PATH 
path_to_directory:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin 
$ source .profile 
$ echo $PATH 
path_to_directory:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin 
+0

我是新來的腳本,我沒有意識到這些空間實際上很重要! –

1

Ubuntu提供了一個方便的實用程序函數pathmunge。此實用程序完全按照您要做的操作執行......它將一個目錄添加到您的路徑中,除非它已經存在。

這裏有一個重複的版本我寫的OSX(但應在大多數* nix系統工作)

function pathmunge() { 
    if [ "$2" = "force" ] || ! echo $PATH | $(which egrep) -q "(^|:)$1($|:)" ; then 
     if [ "$2" = "after" ] ; then 
      PATH=$PATH:$1 
     else 
      PATH=$1:$PATH 
     fi 
     export PATH 
    fi 
} 

這是你如何使用它:

# Modify the path 
pathmunge /usr/local/bin  force 
pathmunge /usr/local/sbin  force 
pathmunge $HOME/.rbenv/bin 
pathmunge /usr/local/heroku/bin 
pathmunge $HOME/bin    after 
相關問題