Sed kullanan komut dosyası çıktı dosyalarına bir “e” ekler


18

Yeni bir kullanıcı ekleyen ve kullanıcıların etki alanı adı için sanal bir ana bilgisayar oluşturan bir komut dosyası var. Komut dosyası, / etc / apache2 / sites-available / içindeki bir istisna dışında harika çalışıyor. Tüm sanal ana bilgisayar dosyalarımın biri e ve diğeri olmadan iki kopyası var.

Sorunumun SED komutunu kullandığımda yattığına inanıyorum. İkinci bir görüş alabilir miyim?

İşte senaryo:

# 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
Maalesef, hatamı fark ettiğimi yazdıktan sonra, SED komutunu kullanırken "inline" dosyasını kopya oluşturmadan düzenlemek için -i seçeneğim vardı. Bazı nedenlerden dolayı betiği de eklemesi gereken e komutunu da ekledim. -İe'yi -i olarak değiştirdim ve komut dosyası gerektiği gibi çalışıyor. Henüz kendi sorumu cevaplayamıyorum, bu yüzden bir yorum ekledim.
jason.dot.h

Yanıtlar:


17

Sed için ayrı -ive -eargümanlara ihtiyacınız var . -iesed'e 'e' eklenmiş bir yedek dosya oluşturmasını söylüyor.

<code> -i </code> için manuel giriş

Düzeltmek için yukarıdaki sed çağrısını aşağıdaki şekilde değiştirin:

sudo sed -i -e "s/NEWUSERNAME/$username/" /etc/apache2/sites-available/$newdomain

Bununla ilgili bir yorumunuz olmasına rağmen, ayrıntıları eksiksizlik için bir cevap olarak ekliyorum.
Jeremy Kerr

Bu cevabı ilk okuduğumda ne söylediğini anladım ama e'nin sonek olarak neden alındığını hemen anlamadım. Daha sonra manuel sayfayı kontrol ettim ve i'nin isteğe bağlı bir argüman aldığını fark ettim. Bu cevabı geçmişe bakıldığında açıkça ortaya koyuyor ama nedenini anlamak bir saniyemi aldı (dolayısıyla resim ekledim).
Chris Schmitz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.