2014-03-13 90 views
1

我有這樣的內容一個鍵 - > value屬性文件(my.prop):Bash - 如何將文件內容讀入變量,該文件是從key-> value屬性文件中讀取的?

ROOT_PATH = /opt/user1/ 
REL_PATH = data/folder1/ 
CONF_FILENAME = my.conf 

在我的bash腳本,我只是讀取這個文件,像這樣:

#!/bin/bash 
PROP_FILE='my.prop' 
ROOT_PATH ='' 
REL_PATH='' 
CONF_FILENAME='' 

while read -r key eq value; do 
    case $key in 
     "ROOT_PATH") 
     ROOT_PATH=${value} 
     ;; 
    case $key in 
     "REL_PATH") 
     REL_PATH=${value} 
     ;; 
    case $key in 
     "CONF_FILENAME") 
     CONF_FILENAME=${value} 
     ;; 
    esac 
done < $PROP_FILE 

之後我想,以形成路徑my.conf文件並閱讀其內容,一些變量,像這樣:

CONF_FULL_PATH=$ROOT_PATH$REL_PATH$CONF_FILENAME 
CONF_FILE_CONTENT=`cat ${CONF_FULL_PATH}` 

如果我打印出CONF_FULL_PATH變量裏面會有一些垃圾(三個子路徑的一部分)。 並且在該行CONF_FILE_CONTENT=`cat ${CONF_FULL_PATH}`我都會有這樣的錯誤信息 - :沒有這樣的文件或directoryta /文件夾1/

所以,我的問題是,我怎麼能形成正確的路徑,my.conf文件,並把它的內容給一些特定的變量?我已經試過source命令作爲while循環的替代品。另外要建立一個合適的路徑字符串,我已經使用了這個語句: $(dirname $ROOT_PATH)/$(dirname REL_PATH)/$(basename $CONF_FILENAME)但是這對我的觀點來說看起來很奇怪。

任何幫助將是偉大的!

+0

'而讀-r鍵EQ值;做聲明「$ key = $ value」;完成<$ PROP_FILE'簡化了你的循環。 – chepner

回答

1

如果您從my.prop文件中刪除空格,則可以使用source(或.)讀取其中的變量。這將使它更容易。

my.prop:

ROOT_PATH=/opt/user1/ 
REL_PATH=data/folder1/ 
CONF_FILENAME=my.conf 

然後你就可以直接在腳本中使用這些:

#!/bin/bash 
. my.prop 
CONF_FULL_PATH="${ROOT_PATH}${REL_PATH}${CONF_FILENAME}" 
CONF_FILE_CONTENT=$(cat "$CONF_FULL_PATH") 
+0

'tr -s'='= my.prop> my.prop.clean' – kojiro

+0

關於點運算符,點/句點**。**是「源」的同義詞,我也嘗試過。問題是如何根據從屬性文件中讀取的字符串來生成有效的**路徑**。 重點是:如果我在這樣連接後打印'CONF_FULL_PATH'如下: 'echo $ CONF_FULL_PATH' 輸出將是: _my.conflder1/_這是不正確的,不知何故它解釋不正確,'$( cat「$ CONF_FULL_PATH」)'會打印_my.conf:沒有這樣的文件或目錄_。 – INlHELL

+0

即使在要連接的變量名稱周圍使用大括號,「echo $ CONF_FULL_PATH」的輸出是否正確? –

相關問題