我是 Linux 管理员的新手,在学习使用 GDB 调试代码时,我需要创建一个input.txt
文件供程序读取。我知道重定向符号,例如>
、>>
和<
,但无法<<
通过 Google 找到相关信息,因为它会忽略它。
下面做什么<<EOF
?
cat >input.txt <<EOF
答案1
摘录自Shell 输入/输出重定向:
此处提供文档
here document 用于将输入重定向到交互式 shell 脚本或程序。我们可以在 shell 脚本中运行交互式程序,只需为交互式程序或交互式 shell 脚本提供所需的输入,而无需用户操作。
- 此处文档的一般格式为:
在这里,shell 将command << delimiter document delimiter
<<
操作符解释为读取输入的指令,直到找到包含指定分隔符的行。然后,直到包含分隔符的行为止的所有输入行都将输入到命令的标准输入中。
分隔符告诉 shell,此处的文档已完成。如果没有它,shell 将继续永远读取输入。分隔符必须是单个单词,并且不包含空格或制表符。wc -l
以下是计算总行数的 命令的输入:$wc -l << EOF This is a simple lookup program for good (and bad) restaurants in Cape Town. EOF 3
- 您可以在此处使用脚本打印多行文档:
这将产生:#!/bin/sh cat << EOF This is a simple lookup program for good (and bad) restaurants in Cape Town. EOF
This is a simple lookup program for good (and bad) restaurants in Cape Town.
- 这将运行与文本编辑器的会话
vi
并将输入保存在文件中test.txt
:#!/bin/sh filename=test.txt vi $filename <<EndOfCommands i This file was created automatically from a shell script ^[ ZZ EndOfCommands
- 如果你以
vim
身份运行此脚本vi
,那么你可能会看到类似如下的输出:运行脚本后,您应该看到以下内容添加到$ sh test.sh Vim: Warning: Input is not from a terminal
test.txt
:$ cat test.txt This file was created automatically from a shell script
答案2
CAT< New.txt (按 Enter) 这里,用户将被提示输入文件“New.txt”。然后按 Cntrl+d 命令来告知这是文件的结尾。
不要使用 cntrl+d,猫<<EOF在这种情况下可以使用命令并在段落末尾输入 EOF。系统将把 EOF 视为段落的结尾。除了 EOF,还可以使用任何字母。例如)CAT<<ZZZ New.txt(按 Enter)。在这里,系统将提示用户输入。在段落末尾,输入雙方,然后按 Enter。系统将考虑雙方作为该段的结束,它将从中出来。