我试图将多行写入文本文件,如下所示:
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脚本中,我可以清楚地看到将用缩进等写的内容。
我应该用这种方式写什么工具?或者我该如何在这里使用猫?
答案 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
的所有内容。