Linux (bash)使用cat将多行文本缩进到$VAR?
OS:Debian 7 Wheezy GNU\LinuxLinux (bash)使用cat将多行文本缩进到$VAR?,linux,bash,eof,heredoc,Linux,Bash,Eof,Heredoc,OS:Debian 7 Wheezy GNU\Linux 语言:Bash 已审核的文档: 工作原理: cat > software.temp <<- EOF gparted baobab EOF cat>software.temp简短回答使用cat-A并确保EOF和行尾之间没有空格 关于这里的两件事doc: 确保该行笔直结束于您通常拾取的字符串EOF,但它可以是任何字符串 -在cat中,您可以将I/O重定向放在here doc之前或之后。如果要通过管道传输here文
语言:Bash
已审核的文档: 工作原理:
cat > software.temp <<- EOF
gparted
baobab
EOF
cat>software.temp简短回答使用cat-A
并确保EOF
和行尾之间没有空格
关于这里的两件事doc
:
确保该行笔直结束于您通常拾取的字符串EOF
,但它可以是任何字符串
-
在cat中,您可以将I/O重定向放在here doc之前或之后。如果要通过管道传输here文档的输出,管道必须跟随它:cat文件-我尝试了cat-${preference}
,但似乎不起作用(以EOF结尾。如果有帮助,您可以检查my。您使用的是Debian?您确定您的脚本不是由dash
而不是bash
运行的吗?两者在某些方面的行为不同,我不确定这里文档的处理是否不是这些方式之一。当您运行bash-x add-Debian-repos.sh时,您看到了什么代码>?它在dash-x add debian repos.sh
或sh-x add debian repos.sh
中的行为是否不同?能否创建MCVE()这不会修改任何人的系统管理内容,但确实说明了问题所在?与/bin/bash add debian repos
一样。您可以与进行比较以供参考。这些分别是我的稳定/测试分支中的行。感谢您的帮助Jonathan。dash为我提供了“未终止的报价字符串”,bash给出“查找匹配项时出现意外EOF”“你在之间有一个空格,这是一些很好的信息,但并不能解决我的用例。我有一个指向我上面代码的链接。如果你不介意的话,你能看看你是否能做到这一点,或者就如何处理它提出建议吗?当然,为了安全起见,只需将functt_set_vars中的vars更改为temp文件。@ProfessorKaos64看@I isolat”请注意,当您使用cat时,我之前和现在都检查了块文本后的EOF没有空格。虽然您的示例有^I
,但我的示例有两个,^I^I
,因为我有两个选项卡指向块。我将整个部分备份到一个选项卡级别,以生成您所拥有的内容。我的行尾 $
就是你的,还有我前面用^I
的标签。我甚至还把我喜欢的$VAR改成了/tmp/file
。如果你得到了我的测试脚本,并更改了顶部的perfer=
VAR,我会怎么做呢?哈哈,你的测试文件代码是e确实起作用了。@Kaoscous64教授,你把我们引向了完全错误的方向。你的脚本在第117行被打断:echo-e“继续。\n”“
你有一个额外的双引号:)
OMG Tiago!!!Welp,shellcheck.net的双盲测试到此为止!我真是太感谢你了。我刚才就知道代码中肯定有其他东西。你让我开心了!也谢谢你Jonathan!
prefer="/etc/apt/preferences.d/${reponame}"
cat <<- EOF >> ${prefer}
Package: *
Pin: release l=Debian
Pin-Priority: 110
EOF
cat <<- EOF
Package: *
Pin: release l=Debian
Pin-Priority: 110
EOF >> ${prefer}
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
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 $
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)