阅读《高级 Bash 脚本指南》第 19 章。
这是一个将内容写入/tmp/yourfilehere
cat << EOF > /tmp/yourfilehere
These contents will be written to the file.
This line is indented.
EOF
请注意,最后的'EOF'( LimitString
)字词前不应有任何空格,因为这意味着LimitString
将不会被识别。
在 shell 脚本中,您可能希望使用缩进来使代码可读,但是这会对在 here 文档中缩进文本产生不良影响。在这种情况下,请使用<<-
(后接破折号)来禁用前导制表符(请注意,要进行测试,您需要将前导空格替换为制表符,因为我无法在此处打印实际的制表符。)
#!/usr/bin/env bash
if true ; then
cat <<- EOF > /tmp/yourfilehere
The leading tab is ignored.
EOF
fi
如果您不想解释文本中的变量,请使用单引号:
cat << 'EOF' > /tmp/yourfilehere
The variable $FOO will not be interpreted.
EOF
通过命令管道传递 heredoc:
cat <<'EOF' | sed 's/a/b/'
foo
bar
baz
EOF
输出:
foo
bbr
bbz
sudo
将 Heredoc 写入文件:
cat <<'EOF' | sed 's/a/b/' | sudo tee /etc/config_file.conf
foo
bar
baz
EOF
代替使用cat
和 I / O 重定向,可以使用tee
代替:
tee newfile <<EOF
line 1
line 2
line 3
EOF
它更加简洁,而且与重定向运算符不同,如果您需要使用 root 权限写入文件, 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
要附加用户 = 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