ubuntu:将多行写入文本文件

时间:2017-01-13 02:04:20

标签: bash ubuntu cat heredoc

我试图将多行写入文本文件,如下所示:

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脚本中,我可以清楚地看到将用缩进等写的内容。

我应该用这种方式写什么工具?或者我该如何在这里使用猫?

2 个答案:

答案 0 :(得分:3)

如果执行<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div> <h4> Form 1 </h4> <form id="form_1"> <input type="checkbox" name="group" value="1"> <input type="checkbox" name="group" value="2"> <input type="checkbox" name="group" value="3"> </form> </div> <div> <h4> Form 2 </h4> <form id="form_2"> <input type="checkbox" name="group" value="1"> <input type="checkbox" name="group" value="2"> <input type="checkbox" name="group" value="3"> </form> </div>,则输出重定向将在原始shell中发生,而不是在超级用户进程中发生,因此仍然会失败。您需要通过显式执行shell将重定向移动到超级用户进程。

sudo cat <<EOT >>filename

答案 1 :(得分:1)

避免必须处理额外引用的简单方法是将命令传递给sudo tee,如:

cat <<EOT | sudo tee -a /path/to/eco.conf >&-
...
EOT
  • | tee filename取代>filename
  • | tee -a filename取代>>filename
  • 添加>&-(或>/dev/null)沉默tee回显它写入stdout的所有内容。