La secuencia de comandos que usa sed agrega una "e" a los archivos de salida


18

Tengo un script que agrega un nuevo usuario y crea un host virtual para el nombre de dominio del usuario. El script funciona muy bien con una excepción ... en / etc / apache2 / sites-available / todos mis archivos de host virtual tienen dos copias, una con una e y otra sin ella.

Creo que mi problema radica cuando uso el comando SED. ¿Puedo obtener una segunda opinión?

Aquí está el guión:

# 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
Lo siento, después de escribir que me di cuenta de mi error, cuando utilicé el comando SED tuve la opción -i para editar el archivo "en línea" sin crear la copia. Por alguna razón, también agregué el comando e, que se supone que agrega el script. Cambié -ie a -i y el script funciona según sea necesario. Todavía no puedo responder mi propia pregunta, así que agregué un comentario.
jason.dot.h

Respuestas:


17

Necesita separar -iy -eargumentos para sed. -iele dice a sed que cree un archivo de respaldo con una 'e' añadida.

entrada manual para <code> -i </code>

Para solucionarlo, simplemente reemplace la invocación sed anterior para:

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

Aunque tiene un comentario con esto, he agregado los detalles como respuesta para completar.
Jeremy Kerr

Cuando leí esta respuesta por primera vez, entendí lo que decía, pero no comprendí de inmediato por qué se tomaba la e como sufijo. Luego revisé la página del manual y me di cuenta de que tomo un argumento opcional. Hace que esta respuesta sea obvia en retrospectiva, pero me llevó un segundo entender el por qué (de ahí la imagen agregada).
Chris Schmitz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.