2012-11-15 38 views
1

我正在使用bash腳本來安裝和配置應用程序。我試圖使用一個模板,我可以從變量中填充值,然後將其保存到適當的位置。這隻適用於變量,但我無法使用任何條件。有沒有更好的方法來做到這一點?bash配置模板

我的繼承人示例模板:

#!/bin/bash 

    cat <<EOF 
    DEFAULTS: &DEFAULTS 
     adapter: $DB 
     host: $DB_HOST 
     username: $DB_USER 
     password: $DB_PASS 
     database: $DB_DATABASE 
     if [ ! $DB_RECONNECT = ""]; then 
     reconnect: $DB_RECONNECT 
     fi 
     if [ ! $DB_TIMEOUT = ""]; then 
     timeout: $DB_TIMEOUT 
     fi 
    EOF 

然後我用source template.sh > /path/to/file評估和保存文件。

+0

想想發生的事情附上一切,你會期望一個'cat' ed文件執行?這就是你正確的做法,除了'cat'的文件來源由'<< EOF' here-document提供。那麼爲什麼不用'chmod 755文件來跟蹤你的'source template> file'; 。/ file'來執行裏面的邏輯? – shellter

回答

1

您不必在定界符

cat <<EOF 
... 
database: $DB_DATABASE 
EOF 

if [ -z "$DB_RECONNECT" ]; then 
    echo "reconnect: $DB_RECONNECT" 
fi 

if [ -z "$DB_TIMEOUT" ]; then 
    echo "timeout: $DB_TIMEOUT" 
fi 
+0

我甚至沒有想過這樣做......謝謝。 –

0

您可以在這個簡單的例子使用命令tpage這樣的:

$ cat /tmp/l.tpl 
DEFAULTS: [%def%] 
    adapter[%db%] 

$ tpage --define def=foo --define db=bar --interpolate /tmp/l.tpl 
DEFAULTS: foo 
    adapterbar 

tpage是衆所周知的Perl模塊Template::Toolkit來的命令,但沒有必要知道Perl使用它。你可以做一些有條件的爲好,看到conditional

項目:http://www.template-toolkit.org/