2017-05-09 9 views
0

内のテキストを置き換えるシェルでファイルを作成し、これは私は変数は、ファイルを作成し、そのファイル内の変数を置き換える宣言したスクリプトを持って、その後

#!/bin/bash 

DMNAME = mydomain.com 

cat <<EOF > /etc/nginx/conf.d/default.conf 

server_name DMNAME; 
root /usr/share/nginx/html/; 
index index.php index.html index.htm; 

ssl_certificate /etc/letsencrypt/live/DMNAME/fullchain.pem; 
ssl_certificate_key /etc/letsencrypt/live/DMNAME/privkey.pem; 
EOF 

sed -i 's/DMNAME/mydomain.com/g' /etc/nginx/conf.d/default.conf 

# 

私のスクリプトの例であるが、これは正しい方法だろうDMNAMEをmydomain.comに置き換えるのはどうですか?

+0

この質問のファイルを作成していますか?ドメインを直接ここに置くだけではないのであれば?そうであれば、それはスペースを含むことができない割り当てを除いて、ファイル内のテキストを置き換える1つの方法です。 – 123

+2

変数の割り当てにスペースを含めることはできません。 –

+0

また、変数を決して参照しないので、割り当ては無意味です。 – 123

答えて

1
#!/bin/bash 

DMNAME="mydomain.com" 

cat <<EOF > /etc/nginx/conf.d/default.conf 
server_name $DMNAME; 
root /usr/share/nginx/html/; 
index index.php index.html index.htm; 

ssl_certificate /etc/letsencrypt/live/$DMNAME/fullchain.pem; 
ssl_certificate_key /etc/letsencrypt/live/$DMNAME/privkey.pem; 
EOF 
+0

変数の代入には空白が含まれていてはなりません。 "$"で参照してくださいありがとう – LVM

+0

@LVM - '='の前後に引用符はありません。あなたのコンテンツの周りに引用符を使用することは常に良いアイデアです。そのルールの例外となる可能性があります。 'cat'の出力を別のファイルにリダイレクトして、それがまだ存在していなければ目的の場所に移動する方が安全かもしれないと考えてください。 – ghoti

0

@Borは、正しく作成されたときに/etc/nginx/conf.d/default.confに正しい値が入力されます。
default.confを複数回使用する場合は、sedのファイルを-iオプションで変更するのではなく、結果を目的のファイルにリダイレクトするようにしてください。

# Answer: do not use this here: DMNAME = mydomain.com 

cat <<EOF > /etc/nginx/conf.d/default.conf 
server_name DMNAME; 
root /usr/share/nginx/html/; 
index index.php index.html index.htm; 

ssl_certificate /etc/letsencrypt/live/DMNAME/fullchain.pem; 
ssl_certificate_key /etc/letsencrypt/live/DMNAME/privkey.pem; 
EOF 

# And now DMNAME="mydomain.com" (without spaces, quotes are optional here). 
# or for different domains 

confpath="/etc/nginx/conf.d" 
for domain in mydomain.com yourdomain.com hisdomain.com; do 
    sed "s/DMNAME/${domain}/g" "${confpath}"/default.conf > "${confpath}"/${domain%.*}.conf 
done 
関連する問題