Script usando sed adiciona um "e" aos arquivos de saída

18

Eu tenho um script que adiciona um novo usuário e cria um host virtual para o nome de domínio dos usuários. O script funciona muito bem com uma exceção ... em / etc / apache2 / sites-available / todos os meus arquivos de host virtual têm duas cópias, uma com e e outra sem.

Acredito que meu problema ocorra quando uso o comando SED. Posso obter uma segunda opinião?

Aqui está o 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.."
jason.dot.h
fonte
3
Desculpe, depois de digitar que percebi meu erro, ao usar o comando SED, tive a opção -i para editar o arquivo "inline" sem criar a cópia. Por alguma razão, adicionei o comando e também, que deve adicionar o script. Alterei -ie para -i e o script funciona conforme necessário. Ainda não consigo responder minha própria pergunta, então adicionei um comentário.
Jason.dot.h

Respostas:

17

Você precisa de argumentos -ie -eargumentos separados para sed. -ieestá dizendo ao sed para criar um arquivo de backup com um 'e' acrescentado.

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

Para corrigir, basta substituir a chamada sed acima para:

sudo sed -i -e "s/NEWUSERNAME/$username/" /etc/apache2/sites-available/$newdomain
Jeremy Kerr
fonte
Embora você tenha um comentário sobre isso, adicionei os detalhes como resposta à integridade.
21411 Jeremy Kerr
Quando li essa resposta pela primeira vez, entendi o que estava dizendo, mas não entendi imediatamente por que o e estava sendo tomado como sufixo. Em seguida, verifiquei a página do manual e percebi que o i recebe um argumento opcional. Torna essa resposta óbvia em retrospecto, mas levei um segundo para entender o porquê (daí a imagem acrescenta).
Chris Schmitz