这个简陋的终端功能在紧要关头提供了一个文本编辑器。Linux和Unixshell中有一个鲜为人知的功能,可让您使用cat命令打开一个do-while循环。它称为heredoc,无论您使用什么shell,它都或多或少地让您拥有一个文本编辑器。它的语法是:$cat<>example.txt中间的字符串(EOF),本质上是一个停止循环的条件。也就是说,如果你在一行中单独输入它,循环就会结束。在循环期间,您在终端中键入的任何内容都将通过管道传输到目标文件(在本例中)。安装只要你有一个终端,你就可以启动heredoc。我已经在Bash、tsh和Kornshell中使用了这个语法技巧。使用heredoc要打开heredoc“会话”,您可以使用带重定向的cat命令。首先指向带有终止字符串的cat命令(常见的约定是EOF,代表“EndOfFile”,但实际上它可以是任何字符串)。在终止字符串之后,将输出重定向到目标文件。然后您可以直接在终端中输入并使用最常见的shell键盘快捷键来完成您的工作。当您在一行中输入您指定的终止字符串时,您的会话结束。您可以通过唯一的提示(通常是>)告诉您处于heredoc循环中。$cat<>example.txt>当我单独在一行中键入EOF时,您在此处键入的所有内容都将放入example.txt中。在那之前,你可以输入...>>任何...>>你想输入。>>EOF$当终端等待EOF时,你输入的所有内容都会被放入目标文件,提示被忽略,并且EOF本身不是文件的一部分。当我单独在一行中键入EOF时,您在此处键入的所有内容都将放入example.txt中。在那之前,您可以输入……任何……您想输入的内容。实际上,您可能不会使用heredoc语法来替换普通的文本编辑器。这是一种快速处理多行的好方法,但超过10行左右就开始限制它的用处。例如,您不能在不触发shell的历史记录功能的情况下编辑前几行。根据您的shell和配置,您可能需要按向上箭头,然后按向下箭头返回您的文本,然后按Ctrl+B返回。您的shell的大部分功能都可以使用,但可能没有撤消功能,并且几乎没有错误恢复功能。此外,即使是安装最少的系统也可能至少安装了Vi或ed。然而heredocs仍然有用!它比echo更灵活,并且在您编写shell脚本时不可或缺。例如,假设您正在编写一个安装脚本,以便您可以自动安装一组自定义应用程序。其中一个应用程序没有生成.dekstop文件,因此它不会出现在您的应用程序菜单中。为了解决这个问题,您决定在安装时生成一个.desktop文件。不要编写.desktop文件,然后将其用作安装脚本的外部依赖项,而是在安装脚本中使用heredoc:#!/bin/shVERSION=${VERSION:-x.y.z}PKGNAM=${VERSION:-example}PKG="${PKGNAM}"-"${VERSION}"-`arch`.tgz#downloadpackagewget"${PKG}"tartxvf"${PKG}"#useheredoctocreatemissing.desktopfilecat<>$HOME/.local/share/applications/example.desktop[DesktopEntry]Version=1.0Type=ApplicationName="${PKGNAM}"Comment="${PKGNAM}"Exec="${PKGNAM}"%FEOF#插入安装脚本的其余部分...您自动将文本输入到文件中,而不需要文本编辑器(当然,您用来编写脚本的编辑器除外)。下面是生成的.desktop文件的样子:[DesktopEntry]Version=1.0Type=ApplicationName=exampleComment=exampleExec=example%F如您所见,您可以在heredoc中使用变量并且它们被正确解析。EOF字符串没有出现在文件中,它只是标记了heredoc的结尾。比echo更好Heredoc技术通常被认为比echo或printf更容易,因为一旦您“进入”文档,您就可以自由地做任何您想做的事。从这个意义上说,它是免费的,但与适当的文本编辑器相比是有限的。使用heredoc进行快速注释和shell脚本,再也不用担心如何动态生成配置文件。