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.