2017-05-09 1 views
0

ersetzt habe ich ein Skript, wo ich erklären Variablen dann eine Datei erstellen und dann eine Variable in dieser Datei ersetzen, das ist mein BeispielskriptErstellen der Datei dann in der Schale Text in

#!/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 

# 

Wäre dies der richtige Weg sein DMNAME durch mydomain.com ersetzen?

+0

Ist die Erstellung der Datei nur für diese Frage? Wenn nicht, warum nicht einfach die Domain direkt in das here-doc setzen? Wenn ja, ist das eine Möglichkeit, den Text in der Datei zu ersetzen, mit Ausnahme der Zuweisung, die keine Leerzeichen enthalten darf. – 123

+2

Sie können keine Leerzeichen in Variablenzuweisungen haben. –

+0

Auch die Zuweisung ist sinnlos, da Sie nie auf die Variable verweisen. – 123

Antwort

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

Also die Variablenzuweisung darf keine Leerzeichen haben und in Anführungszeichen stehen? Dann referenziert mit "$" Dank – LVM

+0

@LVM - keine Anführungszeichen rund um das '=', und es ist immer eine gute Idee, Zitate um Ihre Inhalte zu verwenden ... meistens wenn Sie * eine Domäne verwenden, obwohl das hier-doc kann eine Ausnahme von dieser Regel sein. Bedenken Sie, dass es sicherer ist, die Ausgabe von "cat" in eine andere Datei umzuleiten und diese Datei dann an den Zielort zu verschieben, wenn sie nicht bereits existiert. – ghoti

0

@Bor hat Recht, dass er /etc/nginx/conf.d/default.conf mit den korrekten Werten füllt, wenn er es erstellt.
Wenn Sie default.conf mehr als einmal verwenden möchten, sollten Sie die Datei sed nicht mit der Option -i ändern, sondern die Ergebnisse in die gewünschte Datei umleiten.

# 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 
Verwandte Themen