Скрипт с использованием sed добавляет «е» к выходным файлам

18

У меня есть скрипт, который добавляет нового пользователя и создает виртуальный хост для доменного имени пользователя. Сценарий прекрасно работает с одним исключением ... в / etc / apache2 / sites-available / все файлы моего виртуального хоста имеют две копии, одну с буквой e и одну без.

Я считаю, что моя проблема заключается в том, что я использую команду SED. Могу ли я получить второе мнение?

Вот сценарий:

# 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
источник
3
Извините, после ввода, что я осознал свою ошибку, при использовании команды SED у меня была опция -i, чтобы редактировать файл "inline", не создавая копию. По какой-то причине я также добавил команду e, которая должна добавить скрипт. Я изменил -ie на -i и скрипт работает по мере необходимости. Я пока не могу ответить на свой вопрос, поэтому добавил комментарий.
jason.dot.h

Ответы:

17

Вам нужно отделить -iи -eаргументы СЭД. -ieговорит sed, чтобы создать файл резервной копии с добавлением 'e'.

ручной ввод для <code> -i </ code>

Чтобы исправить, просто замените приведенный выше вызов sed на:

sudo sed -i -e "s/NEWUSERNAME/$username/" /etc/apache2/sites-available/$newdomain
Джереми Керр
источник
Хотя у вас есть комментарий с этим, я добавляю детали в качестве ответа для полноты.
Джереми Керр
Когда я впервые прочитал этот ответ, я понял, о чем он говорит, но не сразу понял, почему его принимают за суффикс. Затем я проверил страницу руководства и понял, что я принимаю необязательный аргумент. Это делает ответ очевидным в ретроспективе, но мне потребовалась секунда, чтобы понять причину (отсюда и изображение).
Крис Шмитц