Le script utilisant sed ajoute un «e» aux fichiers de sortie


18

J'ai un script qui ajoute un nouvel utilisateur et crée un hôte virtuel pour le nom de domaine des utilisateurs. Le script fonctionne très bien avec une exception ... dans / etc / apache2 / sites-available / tous mes fichiers d'hôte virtuel ont deux copies, une avec un e et une sans.

Je crois que mon problème réside lorsque j'utilise la commande SED. Puis-je obtenir un deuxième avis?

Voici le script:

# 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.."

3
Désolé, après avoir tapé que j'ai réalisé mon erreur, lors de l'utilisation de la commande SED, j'avais l'option -i pour modifier le fichier "en ligne" sans créer la copie. Pour une raison quelconque, j'ai également ajouté la commande e, qui est censée ajouter le script. J'ai changé le -ie en -i et le script fonctionne selon les besoins. Je ne peux pas encore répondre à ma propre question, j'ai donc ajouté un commentaire.
jason.dot.h

Réponses:


17

Vous avez besoin de séparer -iet d' -earguments pour séduire. -iedemande à sed de créer un fichier de sauvegarde avec un «e» ajouté.

saisie manuelle pour <code> -i </code>

Pour corriger, remplacez simplement l'invocation sed ci-dessus pour:

sudo sed -i -e "s/NEWUSERNAME/$username/" /etc/apache2/sites-available/$newdomain

Bien que vous ayez un commentaire à ce sujet, j'ai ajouté les détails comme réponse pour être complet.
Jeremy Kerr

Quand j'ai lu cette réponse pour la première fois, j'ai compris ce qu'elle disait mais je n'ai pas immédiatement compris pourquoi le e était pris comme suffixe. J'ai ensuite vérifié la page de manuel et réalisé que i prend un argument facultatif. Cela rend cette réponse évidente rétrospectivement, mais il m'a fallu une seconde pour comprendre le pourquoi (d'où l'ajout de l'image).
Chris Schmitz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.