2011-06-21 80 views

回答

8

首先,你的bash語法被打破設置由於缺乏空間。首先,您需要圍繞[]關閉。如果您使用newer alternate double bracket syntax,則不必擔心引用正在測試的變量。

#!/bin/bash 

if [[ $LD_PATH = "" ]]; then 
    export LD_PATH="$1" 
else 
    export LD_PATH="$LD_PATH" 
fi 

但是你真正的問題不是這樣。由於您的代碼運行在單獨的bash shell中,因此該代碼對您在父shell中運行的任何內容都沒有影響。爲了做到這一點,你會想建立一個功能:

function add_to_ld_path() { 
    if [[ -z $LD_PATH ]]; then 
     export LD_PATH="$1" 
    fi 
} 

該代碼添加到您的.profile文件,然後用add_to_ld_path /my/path當你想使用它運行它。請注意,由於您的「其他」聲明實際上沒有做任何事情,因此我將其刪除。我還通過使用內置空字符串測試的引號來替換空白字符串的測試。

接下來就是你真正想要完成的事情。如果所有你想要做的是設置變量,如果它是空的,UncleAli's solution是非常簡單的。但它也可能做這樣的事情是有用的:

function add_to_ld_path() { 
    case ":$LD_PATH:" in 
     *"$1"*) :;; 
     *) LD_PATH=$LD_PATH:$1 
    esac 
} 

這會檢查當前的路徑和添加給出,如果它不是已經LD_PATH變量的一部分路徑,否則會息事寧人。

+0

使用更好的結構是[[$ foo = bar]]請參閱http://mywiki.wooledge.org/BashFAQ/031 –

+0

@Fredrik:已更改。我試圖儘可能少地改變,所以這個人可以看到發生了什麼事情。他顯然不明白他的代碼在做什麼或者在哪裏做什麼選擇,所以我試圖將漸進式改變顯示在有用的地方。 – Caleb

+0

好方法!爲了完整性,您還可以指出''['實際上是'/ usr/bin /'中的一個二進制文件,這就是爲什麼需要空格的原因 –

2
if [ -z "$LD_PATH" ] 
then 
    export LD_PATH=$1 
fi 

這樣做的工作?

相關問題