我怎样才能写一个heredoc到Bash脚本中的文件?
如何在Bash脚本中将文档写入文件?
而不是使用cat
和I / O重定向,而是使用tee
来代替:
tee newfile <<EOF
line 1
line 2
line 3
EOF
它更简洁,而且与重定向运算符不同,它可以与sudo
结合使用,如果需要使用根权限写入文件。
注意:
这个问题(如何在bash脚本中写一个here文档(aka heredoc)到一个文件?)有(至少)3个主要的独立维度或子问题:
root
)是否拥有该文件? (还有其他的维度/子问题我认为不重要,考虑编辑这个答案来添加它们!)下面是上面列出的问题维度的一些更重要的组合,以及各种不同的分隔标识符 - 没有什么神圣的EOF
,只要确保您用作分隔标识符的字符串不会发生在您的heredoc内部:
要覆盖您拥有的现有文件(或写入新文件),请在heredoc内替换变量引用:
cat << EOF > /path/to/your/file
This line will write to the file.
${THIS} will also write to the file, with the variable contents substituted.
EOF
要附加您拥有的现有文件(或写入新文件),请替换heredoc中的变量引用:
cat << FOE >> /path/to/your/file
This line will write to the file.
${THIS} will also write to the file, with the variable contents substituted.
FOE
要使用heredoc的文字内容覆盖您拥有的现有文件(或写入新文件):
cat << 'END_OF_FILE' > /path/to/your/file
This line will write to the file.
${THIS} will also write to the file, without the variable contents substituted.
END_OF_FILE
要使用heredoc的文字内容附加您拥有的现有文件(或写入新文件):
cat << 'eof' >> /path/to/your/file
This line will write to the file.
${THIS} will also write to the file, without the variable contents substituted.
eof
要覆盖root拥有的现有文件(或写入新文件),请在heredoc内部替换变量引用:
cat << until_it_ends | sudo tee /path/to/your/file
This line will write to the file.
${THIS} will also write to the file, with the variable contents substituted.
until_it_ends
要追加由user = foo拥有的现有文件(或写入新文件)和heredoc的文字内容:
cat << 'Screw_you_Foo' | sudo -u foo tee -a /path/to/your/file
This line will write to the file.
${THIS} will also write to the file, without the variable contents substituted.
Screw_you_Foo