~/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
。${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;
}
ベストアンサー1
あなたが望むのは、基本的には変数拡張ではなく入力ファイルの内容を処理する文字列置換です(シェルは変数を引用するときはそうしますが、入力内容には機能しません)。
これはsed
シェル変数を使用して行うことができます。これ発生する可能性のあるすべての質問に答えてください。
#!/bin/sh
test -n "$1" || exit 1
sed 's/\${domain}/'"$1"'/g' input.txt > output_"$1".txt
input
それに応じて調整してくださいoutput
。また、$1
位置パラメータを変数にコピーする代わりに直接使用していることに注意してください。
私が提案できるより良いアプローチは、テンプレートとして機能するスクリプトを持ち、スクリプトコマンドラインから位置引数として変数を提供するか、変数ファイルをインポートすることです。特にパターンが複雑になった場合、ファイルをコピーして文字列を置き換えて曲芸を実行するのは最善の方法ではありません。