2013-11-26 75 views
0

我在我的配置文件的內容放在我的部署腳本中,因爲他們從我的setting.sh文件得到他們的設置有問題。這會導致我的部署腳本變得非常龐大。用途外殼在變量加載替換佔位符

我想知道是否有可能在bash做這樣的事情

setting.sh

USER="Tom" 

log.conf

log=/$PLACEHOLDER_USER/full.log 

部署。 sh

#!/bin/bash 

# Pull in settings file 
. ./settings.sh 

# Link config to right location 
ln -s /home/log.conf /home/logging/log.conf 

# Write variables on top of placeholder variables in the file 
for $PLACEHOLDER_* in /home/logging/log.conf 
do 
(Replace $PLACEHOLDER_<VARAIBLE> with $VARIABLE) 
done 

我想這對於與$ placeholder_

這個過程開始的配置文件中找到的任何變量的工作,讓我從我的倉庫移動的通用配置文件,然後從添加適當的變量我在配置文件中設置佔位符變量的頂部。

我堅持我如何能得到這個實際使用我的deployment.sh工作。

+0

剛剛'源'你的配置文件(定義'USER =湯姆'等),然後簡單地使用'「$ USER」'? – Alfe

+0

看起來像監督員這樣的程序不允許外部文件的來源 – Jimmy

+0

哇?他們應該如何防止這種情況發生?如果除了我當前的腳本之外還有一個文件,那麼我可以使用'source filename'來源。主管應該如何抑制這種情況? – Alfe

回答

1

這個小小的腳本將會讀取settings.sh的所有變量行,並替換file中的PLACEHOLDER_xxx。這對你有幫助嗎?

while IFS== read variable value 
do 
    sed -i "s/\$PLACEHOLDER_$variable/$value/g" file 
done < settings.sh 
+0

嗨。謝謝你。這看起來不錯,但是從我想的另一個方向來看它。讀取所有變量PLACEHOLDER_XXX並用$ XXX的值替換是不是更好? – Jimmy

0
#!/usr/local/env bash 
set -x 

ln -s /home/log.conf /home/logging/log.conf 

while read user 
do 
usertmp=$(echo "${user}" | sed s'@USER=\"@@' \ 
sed s'@"[email protected]@') 
user="${usertemp}" 
log="${user}"/full.log 
done < setting.sh 

我真的不明白你想做什麼的其餘部分,我會承認,但是這將有希望給你的想法。使用閱讀。

+0

我不認爲這是我所追求的。我正在尋找文件中的任何變量,例如$ PLACEHOLDER_ ,並在settings.sh中用$ VARIABLE的值替換。例如,如果該文件具有「$ PLACEHOLDER_USER」,則會將「Tom」放入該文件中 – Jimmy