#!/bin/bash
if[$LD_PATH == ""]
then
export LD_PATH=$1
else
export LD_PATH=$LD_PATH
fi
#excute the program that needs the path
./someProgThatNeedsThePath
我不斷收到「無法打開共享對象文件」如何檢查PATH是否設置?如果不是,從參數
#!/bin/bash
if[$LD_PATH == ""]
then
export LD_PATH=$1
else
export LD_PATH=$LD_PATH
fi
#excute the program that needs the path
./someProgThatNeedsThePath
我不斷收到「無法打開共享對象文件」如何檢查PATH是否設置?如果不是,從參數
首先,你的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變量的一部分路徑,否則會息事寧人。
使用更好的結構是[[$ foo = bar]]請參閱http://mywiki.wooledge.org/BashFAQ/031 –
@Fredrik:已更改。我試圖儘可能少地改變,所以這個人可以看到發生了什麼事情。他顯然不明白他的代碼在做什麼或者在哪裏做什麼選擇,所以我試圖將漸進式改變顯示在有用的地方。 – Caleb
好方法!爲了完整性,您還可以指出''['實際上是'/ usr/bin /'中的一個二進制文件,這就是爲什麼需要空格的原因 –
if [ -z "$LD_PATH" ]
then
export LD_PATH=$1
fi
這樣做的工作?
你真的需要'else export LD_PATH = $ LD_PATH'嗎?你不是在設置變量的值嗎? – Teletha