2012-09-12 40 views
0

我編寫了一個腳本來自動將ServerAlias添加到Apache配置文件中,然後重新啓動Apache,並對sedtr以及可能的shell腳本進行了補救。這是我想出了:優化sed/tr外殼腳本

cp /etc/httpd/sites/site.conf tmphost && 
sed s/ServerName\ site.com/ServerName\ site.com^#ServerAlias\ sub.site.com/ \ 
     tmphost | 
    tr '^#' '\n\t' >/etc/httpd/sites/site.conf && 
rm -f tmphost && 
apachectl restart 

基本上我創建副本,用自身替換服務器名行+新的別名,使用tr放於新行和標籤(sed當時正在怪異有關?),覆蓋舊的配置文件,刪除副本,然後重新啓動Apache。

它的作品,但並不真正讓媽媽感到驕傲,如果你明白我的意思。任何關於如何清理的想法?

回答

3

如果要添加服務器名行之後ServerAlias線,爲什麼不使用「追加」命令添加一行:

sed '/ServerName site.com/a\ 
    ServerAlias sub.site.com' tmphost >/etc/httpd/sites/site.conf 

有一個「標籤」在額外行的開始,這你似乎需要。

如果你已經GNU sed的,你可以做就地編輯與-i選項,並沒有臨時文件(但如果你正在編輯的文件有多個硬鏈接不使用-i選項,並且可能不會如果它是符號鏈接,請參見William Pursell中的以下注釋)。

請注意,您應該在包裝代碼:

trap "rm -f tmphost; exit 1" 0 1 2 3 13 15 
...script manipulating tmphost... 
rm -f tmphost 
trap 0 

,以便臨時文件不在身邊離開,如果因爲一個信號的shell退出。當然,如果你有一個就地修改,你根本不需要臨時文件。

+0

在另一方面,這是什麼'sed的-i'與臨時文件做,如果它中止出於某種原因?它是否清理臨時文件?最好避免'-i'。 –

+0

我只是用'sed -i.bak'/ ServerName site.com/a \ ServerAlias sub.site.com'/ etc/httpd/sites/site.conf'工作。注意我必須刪除附件才能工作。 – Osan

+0

道歉 - 我會解決答案。 –

0

我喜歡使用SED直接ServerAilas另外的方式:

sed -i "0,/^ServerName.\+/s//\0\nServerAlias sub.site.com/" /etc/httpd/sites/site.conf 
apachectl reload