Skrypt używający sed dodaje „e” do plików wyjściowych

18

Mam skrypt, który dodaje nowego użytkownika i tworzy wirtualny host dla nazwy domeny użytkowników. Skrypt działa świetnie z jednym wyjątkiem ... w / etc / apache2 / sites-available / wszystkie moje wirtualne pliki hosta mają dwie kopie, jedną ze znakiem e, a drugą bez.

Uważam, że mój problem leży po użyciu polecenia SED. Czy mogę uzyskać drugą opinię?

Oto skrypt:

# 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
źródło
3
Przepraszam, po wpisaniu, że zdałem sobie sprawę z mojego błędu, podczas korzystania z polecenia SED miałem opcję -i do edycji pliku „inline” bez tworzenia kopii. Z jakiegoś powodu dodałem także polecenie e, które ma dodać skrypt. Zmieniłem -ie na -i i skrypt działa w razie potrzeby. Nie mogę jeszcze odpowiedzieć na własne pytanie, więc dodałem komentarz.
jason.dot.h

Odpowiedzi:

17

Potrzebujesz oddzielnych argumentów -ii -eargumentów. -iemówi sedowi, aby utworzył plik kopii zapasowej z dołączonym „e”.

ręczne wprowadzanie <code> -i </code>

Aby to naprawić, po prostu zastąp powyższe wywołanie sed, aby:

sudo sed -i -e "s/NEWUSERNAME/$username/" /etc/apache2/sites-available/$newdomain
Jeremy Kerr
źródło
Chociaż masz do tego komentarz, dodam szczegóły jako odpowiedź na kompletność.
Jeremy Kerr
Kiedy po raz pierwszy przeczytałem tę odpowiedź, zrozumiałem, co ona mówi, ale nie od razu zrozumiałem, dlaczego e jest traktowane jako przyrostek. Następnie sprawdziłem stronę podręcznika i zdałem sobie sprawę, że i bierze opcjonalny argument. Sprawia, że ​​ta odpowiedź jest oczywista z perspektywy czasu, ale zajęło mi sekundę, aby zrozumieć, dlaczego (stąd dodanie obrazu).
Chris Schmitz