Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux (bash)使用cat将多行文本缩进到$VAR?_Linux_Bash_Eof_Heredoc - Fatal编程技术网

Linux (bash)使用cat将多行文本缩进到$VAR?

Linux (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文

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文档的输出,管道必须跟随它:
    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)