2017-01-13 36 views
-1

我想寫多行文本文件,像這樣:Ubuntu的:寫多行文本文件

cat <<EOT >> /etc/apache2/sites-available/eco.conf 
<VirtualHost *:80> 
    ServerName eco.vagrant 
    DocumentRoot /var/www/eco/website/public  

    <Directory var/www/eco/website/public/> 
     Options FollowSymLinks 
     AllowOverride All 
    </Directory> 

    # Logging 
    ErrorLog /var/log/apache2/eco-error.log 
    LogLevel notice 
    CustomLog /var/log/apache2/eco-access.log combined 
</VirtualHost> 
EOT 

,但我得到bash: /etc/apache2/sites-available/o-eco.conf: Permission denied

所以,我想sudo cat...只是相同。

我挺喜歡有它這樣的,而不是單一的線,因爲它是一個bash腳本中,我可以清楚地看到什麼將與壓痕等被寫入

我應該使用什麼工具內容用這種方式寫?或者我應該如何在這裏使用貓?

+1

您無權寫入文件。語法並不重要。 – Barmar

+0

這個問題會更適合超級用戶或Linux SE站點。 – EJoshuaS

回答

2

如果你這樣做sudo cat <<EOT >>filename,輸出重定向是發生在你的原裝外殼,而不是在超級用戶進程,所以它仍然失敗。您需要通過顯式執行shell將重定向移動到超級用戶進程中。

sudo bash -c 'cat <<EOT >>/etc/apache2/sites-available/eco.conf 
<VirtualHost *:80> 
    ServerName eco.vagrant 
    DocumentRoot /var/www/eco/website/public  

    <Directory var/www/eco/website/public/> 
     Options FollowSymLinks 
     AllowOverride All 
    </Directory> 

    # Logging 
    ErrorLog /var/log/apache2/eco-error.log 
    LogLevel notice 
    CustomLog /var/log/apache2/eco-access.log combined 
</VirtualHost> 
EOT 
' 
1

一個簡單的方法,以避免應付額外的報價是管你的命令sudo tee,如:

cat <<EOT | sudo tee -a /path/to/eco.conf >&- 
... 
EOT 
  • | tee filename取代>filename
  • | tee -a filename取代>>filename
  • 添加>&- (或>/dev/null)沉默tee回覆了它寫入的所有內容stdout
+0

可以消除cat的使用:'sudo tee -a /path/to/eco.conf>& - << EOT' –