Io-Redirection

cat-redirect 一個文件,但有變數擴展

  • February 5, 2018

我有~/nginx_app包含此 conf 模板的文件:

server {
   root /var/www/html/${domain}/;
   server_name ${domain} www.${domain};
}

我也有這個腳本:

#!/bin/bash
domain="$1" && test -z ${domain} && return
cat ~/myAddons/nginx_app > /etc/sites-available/${domain}.conf

如您所見,我希望將腳本基於模板創建的內容重定向nginx_app到 into 。${domain}.conf

現在,當cat重定向發生時,需要擴展模板內的變數。你如何保證擴張確實發生了?

我在想here-string,但我知道它會列印一個字元串:

cat > "etc/nginx/sites-available/${domain}.conf" <<< "source ~/myAddons/nginx_app"

還有這個

cat ~/myAddons/nginx_app > etc/nginx/sites-available/${domain}.conf

更新

執行腳本後,結束狀態應該/etc/sites-available/example.com.conf

server {
   root /var/www/html/example.com/;
   server_name example.com www.example.com;
}

您想要做的基本上是字元串替換來處理輸入文件的內容,而不是變數擴展(儘管當您引用變數時,shell 會執行此操作,但這不是輸入內容的工作)。

這可以通過 來完成sed,並且可以使用 shell 變數,儘管請參閱答案以了解可能的問題。

#!/bin/sh
test -n "$1" || exit 1
sed 's/\${domain}/'"$1"'/g' input.txt > output_"$1".txt

input並相應地進行調整output。另請注意,我$1直接使用位置參數,而不是將其複製到變數中。

如果我可以建議更好的方法是擁有一個充當模板的腳本,並且您只提供變數作為腳本命令行的位置參數,或者通過採購變數文件。複製文件並通過替換字元串執行雜技,尤其是在模式變得複雜的情況下,並不是最好的方法。

引用自:https://unix.stackexchange.com/questions/421909