<<EOF 有什么作用?

LED*_*tom 34 linux unix administrator

我是 Linux 管理员的新手,在学习 GDB 来调试我的代码时,我需要创建一个input.txt文件供我的程序读取。我知道重定向符号,例如>>><,也没有找到有关信息<<,因为它忽略它通过谷歌。

什么是<<EOF下面怎么办?

cat >input.txt <<EOF
Run Code Online (Sandbox Code Playgroud)

小智 35

Shell 输入/输出重定向的摘录:

Here 文档

here 文档用于将输入重定向到交互式 shell 脚本或程序。通过为交互式程序或交互式 shell 脚本提供所需的输入,我们可以在没有用户操作的情况下在 shell 脚本中运行交互式程序。

  • here 文档的一般形式是:
    command << delimiter
    document
    delimiter
    
    Run Code Online (Sandbox Code Playgroud) 在这里,shell 将<<运算符解释为读取输入的指令,直到找到包含指定分隔符的行。然后,所有输入行直到包含分隔符的行都被送入命令的标准输入中。

    分隔符告诉 shell,here 文档已经完成。没有它,shell 将永远读取输入。分隔符必须是不包含空格或制表符的单个单词。

  • 以下是wc -l用于计算总行数的命令的输入:
    $wc -l << EOF
    This is a simple lookup program for good (and bad) restaurants in Cape Town.
    EOF
    3
    
    Run Code Online (Sandbox Code Playgroud)
  • 您可以使用此处的文档使用脚本打印多行:
    #!/bin/sh
    
    cat << EOF
    This is a simple lookup program for good (and bad) restaurants in Cape Town.
    EOF
    
    Run Code Online (Sandbox Code Playgroud) 这将产生:
    This is a simple lookup program for good (and bad) restaurants in Cape Town.
    
    Run Code Online (Sandbox Code Playgroud)
  • 这将运行与vi文本编辑器的会话并将输入保存在文件中test.txt
    #!/bin/sh
    
    filename=test.txt
    
    vi $filename <<EndOfCommands
    i
    This file was created automatically from a shell script
    ^[
    ZZ
    EndOfCommands
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果您使用vimas运行此脚本vi,那么您可能会看到如下输出:
    $ sh test.sh
      Vim: Warning: Input is not from a terminal
    
    Run Code Online (Sandbox Code Playgroud) 运行脚本后,您应该会看到以下内容添加到test.txt
    $ cat test.txt
      This file was created automatically from a shell script
    
    Run Code Online (Sandbox Code Playgroud)

  • +1 为开普敦参考哈哈 (2认同)