Script using sed menambahkan "e" ke file output

18

Saya memiliki skrip yang menambahkan pengguna baru dan membuat host virtual untuk nama domain pengguna. Script berfungsi dengan baik dengan satu pengecualian ... di / etc / apache2 / sites-available / semua file host virtual saya memiliki dua salinan, satu dengan e dan satu tanpa.

Saya percaya masalah saya terletak ketika saya menggunakan perintah SED. Bisakah saya mendapatkan pendapat kedua?

Ini skripnya:

# 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
sumber
3
Maaf, setelah mengetik saya menyadari kesalahan saya, ketika menggunakan perintah SED saya memiliki opsi -i untuk mengedit file "inline" tanpa membuat salinan. Untuk beberapa alasan saya menambahkan perintah e juga, yang seharusnya menambahkan skrip. Saya mengubah -ie ke -i dan skrip berfungsi sesuai kebutuhan. Saya belum bisa menjawab pertanyaan saya sendiri jadi saya menambahkan komentar.
jason.dot.h

Jawaban:

17

Anda perlu terpisah -i-e argumen dan untuk sed. -iemengatakan sed untuk membuat file cadangan dengan 'e' ditambahkan.

entri manual untuk <code> -i </code>

Untuk mengatasinya, ganti saja permintaan sed di atas ke:

sudo sed -i -e "s/NEWUSERNAME/$username/" /etc/apache2/sites-available/$newdomain
Jeremy Kerr
sumber
Meskipun Anda punya komentar dengan ini, saya sudah menambahkan detail sebagai jawaban untuk kelengkapan.
Jeremy Kerr
Ketika saya pertama kali membaca jawaban ini, saya mengerti apa yang dikatakannya tetapi tidak segera memahami mengapa e diambil sebagai sufiks. Saya kemudian memeriksa halaman buku panduan dan menyadari bahwa saya mengambil argumen opsional. Itu membuat jawaban ini jelas dalam retrospeksi tetapi butuh satu detik untuk memahami mengapa (karenanya gambar ditambahkan).
Chris Schmitz