第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Bash模板:如何使用Bash從模板構(gòu)建配置文件?

Bash模板:如何使用Bash從模板構(gòu)建配置文件?

一只名叫tom的貓 2019-11-23 11:15:40
我正在編寫一個(gè)腳本,為自己的Web服務(wù)器自動(dòng)為Apache和PHP創(chuàng)建配置文件。我不想使用任何CPanel或ISPConfig之類的GUI。我有一些Apache和PHP配置文件的模板。Bash腳本需要讀取模板,進(jìn)行變量替換并將已解析的模板輸出到某個(gè)文件夾中。最好的方法是什么?我可以想到幾種方式。哪一個(gè)最好,或者可能有更好的方法呢?我想在純Bash中做到這一點(diǎn)(例如,在PHP中很簡(jiǎn)單)1)如何在文本文件中替換$ {}占位符?template.txt:the number is ${i}the word is ${word}script.sh:#!/bin/sh#set variablesi=1word="dog"#read in template one line at the time, and replace variables#(more natural (and efficient) way, thanks to Jonathan Leffler)while read linedo    eval echo "$line"done < "./template.txt"順便說(shuō)一句,我如何在這里將輸出重定向到外部文件?如果變量包含引號(hào),我是否需要轉(zhuǎn)義?2)使用cat&sed用其值替換每個(gè)變量:給定template.txt:The number is ${i}The word is ${word}命令:cat template.txt | sed -e "s/\${i}/1/" | sed -e "s/\${word}/dog/"這對(duì)我來(lái)說(shuō)似乎很糟糕,因?yàn)樾枰D(zhuǎn)義許多不同的符號(hào),并且?guī)в性S多變量,所以該行太長(zhǎng)了。您能想到其他一些優(yōu)雅安全的解決方案嗎?
查看完整描述

3 回答

?
千萬(wàn)里不及你

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊

您可以使用此:


perl -p -i -e 's/\$\{([^}]+)\}/defined $ENV{$1} ? $ENV{$1} : $&/eg' < template.txt

${...}用相應(yīng)的環(huán)境變量替換所有字符串(運(yùn)行此腳本之前不要忘記導(dǎo)出它們)。


對(duì)于純bash,這應(yīng)該可以工作(假設(shè)變量不包含$ {...}字符串):


#!/bin/bash

while read -r line ; do

    while [[ "$line" =~ (\$\{[a-zA-Z_][a-zA-Z_0-9]*\}) ]] ; do

        LHS=${BASH_REMATCH[1]}

        RHS="$(eval echo "\"$LHS\"")"

        line=${line//$LHS/$RHS}

    done

    echo "$line"

done

。如果RHS引用一些引用自身的變量,則該解決方案不會(huì)掛起:


#!/ bin / bash

line =“ $(cat; echo -na)”

end_offset = $ {#line}

而[[“ $ {line:0:$ end_offset}” =?(。*)(\ $ \ {([a-zA-Z _] [a-zA-Z_0-9] *)\})(。* )]];做

    PRE =“ $ {BASH_REMATCH [1]}”

    POST =“ $ {BASH_REMATCH [4]} $ {line:$ end_offset:$ {#line}}”

    VARNAME =“ $ {BASH_REMATCH [3]}”

    eval'VARVAL =“ $'$ VARNAME'”'

    line =“ $ PRE $ VARVAL $ POST”

    end_offset = $ {#PRE}

完成

echo -n“ $ {line:0:-1}”

警告:我不知道一種正確處理bash中NUL的輸入或保留尾隨換行符數(shù)量的方法。出現(xiàn)最后一個(gè)變體是因?yàn)闅ぁ跋矚g”二進(jìn)制輸入:


read 將解釋反斜杠。

read -r 不會(huì)解釋反斜杠,但如果不以換行符結(jié)尾,仍會(huì)刪除最后一行。

"$(…)"因?yàn)橛斜緦⑷コM可能多的尾隨換行符,所以我最終…與; echo -n a和使用echo -n "${line:0:-1}":此下降的最后一個(gè)字符(這是a)和蜜餞盡可能多的尾隨換行符有一個(gè)在輸入(包括無(wú))。


查看完整回答
反對(duì) 回復(fù) 2019-11-23
?
慕沐林林

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊

嘗試 envsubst


FOO=foo

BAR=bar

export FOO BAR


envsubst <<EOF

FOO is $FOO

BAR is $BAR

EOF


查看完整回答
反對(duì) 回復(fù) 2019-11-23
  • 3 回答
  • 0 關(guān)注
  • 796 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)