Ein Skript, das sed verwendet, fügt den Ausgabedateien ein „e“ hinzu

18

Ich habe ein Skript, das einen neuen Benutzer hinzufügt und einen virtuellen Host für den Domänennamen des Benutzers erstellt. Das Skript funktioniert mit einer Ausnahme hervorragend ... in / etc / apache2 / sites-available / haben alle meine virtuellen Hostdateien zwei Kopien, eine mit einem e und eine ohne.

Ich glaube, mein Problem liegt darin, wenn ich den SED-Befehl verwende. Kann ich eine zweite Meinung einholen?

Hier ist das Skript:

# set the working directory
dir=$(pwd)

# request the new domain name
printf "Enter the new domain name, without the www (i.e newdomain.com):\n"
read newdomain

# request the new username
printf "Enter the new username (i.e newusername):\n"
read username

# create the new user
sudo adduser $username

# copy the virtual host to sites-available
sudo cp /templates/domain-vhost /etc/apache2/sites-available/$newdomain

# echo results
echo "Successfully created the virtual host file at: /etc/apache2/sites-available/$newdomain.."

# change the domain name in the virtual host file
sudo sed -ie "s/NEWDOMAINNAME/$newdomain/" /etc/apache2/sites-available/$newdomain

# echo results
echo "Modified the virtual host to reflect the new domain: $newdomain.."

# change the directory path in the virtual host
sudo sed -ie "s/NEWUSERNAME/$username/" /etc/apache2/sites-available/$newdomain

# echo results
echo "Successfully modified the new virtual host file.."

# enable the site with apache
cd /etc/apache2/sites-available/
sudo a2ensite $newdomain

# echo results
echo "Successfully enabled the $newdomain.."

# change to previous working directory
cd $dir

# reload apache
sudo /etc/init.d/apache2 reload

# notify user of action
echo "Finished creating the new domain, $newdomain, and restarted Apache.."
jason.dot.h
quelle
3
Entschuldigung, nach der Eingabe, dass ich meinen Fehler erkannt habe, hatte ich bei Verwendung des SED-Befehls die Option -i, die Datei "inline" zu bearbeiten, ohne die Kopie zu erstellen. Aus irgendeinem Grund habe ich auch den Befehl e hinzugefügt, der das Skript hinzufügen soll. Ich habe das -ie in -i geändert und das Skript funktioniert nach Bedarf. Ich kann meine Frage noch nicht beantworten und habe einen Kommentar hinzugefügt.
jason.dot.h

Antworten:

17

Sie brauchen getrennte -iund -eArgumente zu sed. -ieweist sed an, eine Sicherungsdatei mit einem angehängten 'e' zu erstellen.

manuelle Eingabe für <code> -i </ code>

Um das Problem zu beheben, ersetzen Sie einfach den obigen sed-Aufruf durch:

sudo sed -i -e "s/NEWUSERNAME/$username/" /etc/apache2/sites-available/$newdomain
Jeremy Kerr
quelle
Obwohl Sie dies kommentiert haben, habe ich die Details der Vollständigkeit halber hinzugefügt.
Jeremy Kerr
Als ich diese Antwort zum ersten Mal las, verstand ich, was sie sagte, begriff aber nicht sofort, warum das e als Suffix verwendet wurde. Ich überprüfte dann die Handbuchseite und stellte fest, dass ich ein optionales Argument nehme. Es macht diese Antwort im Nachhinein offensichtlich, aber ich brauchte eine Sekunde, um das Warum zu verstehen (daher das Bild hinzufügen).
Chris Schmitz