操作系统: Debian 7 Wheezy GNU \ Linux
语言: Bash
已经审查过的文件: wiki / heredoc
什么工作:
cat > software.temp <<- EOF gparted baobab EOF
什么不是
prefer="/etc/apt/preferences.d/${reponame}" cat <<- EOF >> ${prefer} Package: * Pin: release l=Debian Pin-Priority: 110 EOF
是的,我知道这是相反的,这可能是我没有得到它的工作。 从本质上来说,“找不到EOF”的错误。 请注意, 上面的每个块都用TAB 缩进一次或多次。 你可以在这里看到我的代码。 我不知道是否是因为我如何直接input/输出。
我可能以为像下面这样的东西,但也没有工作。
cat <<- EOF Package: * Pin: release l=Debian Pin-Priority: 110 EOF >> ${prefer}
简短的回答使用cat -A
,并确保EOF
和行尾之间没有空格。
here-doc
两件事here-doc
:
确保在你选择的字符串之后直线结束,通常是EOF
但可以是任何东西。
-
在cat <<-EOF
允许缩进,所以行可以开始与选项卡和这些选项卡将不会被打印。
例子:
tiago@dell:/tmp$ cat test1.sh #!/bin/bash cat << EOF Hello here-doc EOF tiago@dell:/tmp$ cat test2.sh #!/bin/bash cat << EOF Hello here-doc EOF tiago@dell:/tmp$ bash test1.sh Hello here-doc tiago@dell:/tmp$ bash test2.sh test2.sh: line 4: warning: here-document at line 2 delimited by end-of-file (wanted `EOF') Hello here-doc EOF
这两个文件看起来是一样的,但是在test2.sh文件编辑器中没有注意到EOF之后有一个空格,但是可以使用cat -A
:
tiago@dell:/tmp$ cat -A test1.sh #!/bin/bash$ cat << EOF$ Hello here-doc$ EOF$ tiago@dell:/tmp$ cat -A test2.sh #!/bin/bash$ cat << EOF$ Hello here-doc$ EOF $
现在WRT缩进:
tiago@dell:/tmp$ cat test3.sh #!/bin/bash cat << EOF Hello here-doc EOF cat <<-EOF Hello here-doc (Indentation ignored) EOF tiago@dell:/tmp$ bash test3.sh Hello here-doc Hello here-doc (Indentation ignored)