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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.