专栏首页linux百科小宇宙Linux命令技巧分享:Bash Heredoc 使用示例
原创

Linux命令技巧分享:Bash Heredoc 使用示例

编写shell脚本时,您可能需要将多行文本或代码块传递给交互式命令,例如tee,cat或sftp。在Bash和其他类似Zsh的shell中,Here document(Heredoc)是一种重定向,允许您将多行输入传递给命令。

编写HereDoc的语法采用以下形式:

[COMMAND] <<[-] 'DELIMITER'

  HERE-DOCUMENT

DELIMITER

第一行以可选命令开头,后跟特殊重定向运算符<<和分隔标识符。

您可以使用任何字符串作为分隔标识符,最常用的是EOF或END。

如果分隔标识符未加引号,则在将here-document行传递给命令之前,shell将替换所有变量,命令和特殊字符。

将减号添加到重定向运算符<<  - 将导致忽略所有前导制表符。 这允许您在此处写入时使用缩进 -  shell脚本中的文档。 不允许使用前导空白字符,只允许使用制表符。

here-document块可以包含字符串,变量,命令和任何其他类型的输入。

最后一行以分隔标识符结束。分隔符前的空白是不允许的。

基本的Heredoc例子

在本节中,我们将介绍如何使用heredoc的一些基本示例。

Heredoc最常与cat命令结合使用。

在下面的示例中,我们使用here document将包含环境变量和命令的两行文本传递给cat。

linuxidc@linuxidc:~/linuxidc.com$ cat << EOF

> 当前的工作目录是: $PWD

> 您登录的身份为: $(whoami)

> EOF

从下图的输出中可以看出,变量和命令都被替换:

当前的工作目录是: /home/linuxidc/linuxidc.com

您登录的身份为: linuxidc

让我们看看如果我们将分隔符用单引号或双引号括起来会发生什么。

linuxidc@linuxidc:~/linuxidc.com$ cat <<- "EOF"

> 当前的工作目录是: $PWD

> 您登录的身份为: $(whoami)

> EOF

您可以注意到,当引用分隔符时,shell不会执行参数扩展和命令替换。

当前的工作目录是: $PWD

您登录的身份为: $(whoami)

如果在语句或循环中使用heredoc,请使用<<- 重定向操作,允许您缩进代码。

if true; then

    cat <<- EOF

    Line with a leading tab.

    EOF

fi

输出:

Line with a leading tab.

您可以使用>,>>运算符将其重定向到文件,而不是在屏幕上显示输出。

cat < linuxidc.txt

当前的工作目录是: $PWD

您登录的身份为: $(whoami)

EOF

如果linuxidc.txt不存在,则会创建它。 使用时>文件将被覆盖,而>>将输出附加到文件。(如下图)

还可以通过管道输入heredoc。在下面的例子中,sed命令将用m替换所有i字符的实例:

linuxidc@linuxidc:~/linuxidc.com$ cat <<'EOF' |  sed 's/i/m/g'

> idc

> linuxmi

> EOF

输出如下:

mdc

lmnuxmm

要将管道数据写入文件:

linuxidc@linuxidc:~/linuxidc.com$ cat < linuxidc.txt

> idc

> linuxmi

> EOF

使用Heredoc和SSH

使用Heredoc是通过SSH在远程系统上执行多个命令的最方便和最简单的方法之一。

使用不带引号的分隔符时,请确保转义所有变量、命令和特殊字符,否则将在本地插入这些变量、命令和特殊字符。

ssh -T user@host.com << EOF

echo "The current local working directory is: $PWD"

echo "The current remote working directory is: \$PWD"

EOF

输出:

The current local working directory is: /home/linuxidc

The current remote working directory is: /home/use

您可能还需要设置基于SSH密钥的身份验证并连接到Linux服务器而无需输入密码。

总结

在本指南中,您已经了解了什么是heredoc以及如何在shell脚本中使用它。

更多Linux命令相关信息见Linux命令大全 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=16

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在Linux使用Bash脚本命令

    tee命令的默认行为是覆盖指定的文件,与>运算符相同。 要将输出附加到文件,请使用-a(--append)选项调用命令:

    用户5005176
  • Linux 操作系统下的bash read命令

    read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。

    用户5005176
  • 10 个提升效率的Linux小技巧

    您是否曾经惊讶于看到某人在 UNIX 中非常快速地工作,触发命令并快速地执行操作?是的,我碰到过几次,并且我一直都在向那些超级巨星开发者学习。在本文中,我想分享...

    淡定的蜗牛
  • Linux中高效编写Bash脚本的10个技巧

    Linux开源社区(微信号:cn_linux) 英文:Aaron Kili,翻译:Linux中国/ch-cn 链接:linux.cn/article-8618...

    顶级程序员
  • Linux常用命令05 - 文本追加到文件中

    重定向允许您捕获命令的输出,并将其作为输入发送到另一个命令或文件。 重定向运算符将输出追加到给定文件。

    叉叉敌
  • Linux dmesg命令使用示例

    dmesg命令对于设备故障的诊断是非常重要的。在dmesg命令的帮助下进行硬件的连接或断开连接操作时,我们可以看到硬件的检测或者断开连接的信息。dmesg命令在...

    用户8710643
  • 学会这些 shell 小技巧,我就爱上 Linux 了

    东哥带你手把手撕力扣~ 作者:labuladong 公众号:labuladong 若已授权白名单也必须保留以上来源信息

    labuladong
  • 如何在Linux中创建文件?多个文件创建操作命令。

    如果文件file1.txt不存在,则上面的命令将创建该文件,否则,它将更改其时间戳。

    用户5005176
  • Linux 中高效编写 Bash 脚本的 10 个技巧

    Shell 脚本编程是你在 Linux 下学习或练习编程的最简单的方式。尤其对系统管理员要处理着自动化任务,且要开发新的简单的实用程序或工具等(这里只是仅举几例...

    阿dai学长
  • linux执行某些命令后或者访问某些网站资源出现错误后该如何输出到一个文件内?

    我们经常在Linux上执行某些命令后或者访问某些网站资源不定时出现一些错误、超时,但是想要统计某些错误到另一个文件内,该如何输出到一个文件内呢?

    子沐u
  • 终端操作(SHELL)技巧

    本篇是一些小但是有用的终端操作技巧和一些快捷方式,可以让你在 linux 命令行有出奇的效率。一方面这些技巧可以让你的效率有所提高, 但有时候也会有隐患, 所以...

    用户1416054
  • Linux命令行的艺术

    熟练使用命令行是一种常常被忽视或被认为难以掌握的技能,但实际上,它可以提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时发现的一些关于命令...

    小小科
  • Linux中使用top命令的技巧

    1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等 2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

    砸漏
  • Linux基础命令行使用技巧

    描述:本章主要学习并记录了Linux中命令行补全以及参数补全的实现方法,还Linux中执行过的命令进行查看,让您想Hacker一样操作终端;

    WeiyiGeek
  • 20 个提高生产力的 Linux 命令与技巧!

    简介:这里有一些很有用的 Linux 命令,终端技巧和快捷方式,可以在使用Linux命令行时节省大量时间。

    杰哥的IT之旅
  • 一周极客热文:一个7岁女孩告诉你的关于计算机编程的本质

    一个七岁的女孩子,在花了一个小时学习编程后,她对编程得出了令人赞叹的体会。(如上图) 计算机很傻,它只会做那些你让它做的事。 编程真的很难!(你必须非常的认真!...

    钱曙光
  • 怎么在Linux中自定义bash命令提示符

    众所周知, bash (the B ourne- A gain Sh ell)是目前绝大多数 Linux 发行版使用的默认 shell。本文将会介绍怎么通过添加...

    砸漏
  • 如何在Linux中自定义bash命令提示符

    众所周知, bash (the B ourne- A gain Sh ell)是目前绝大多数 Linux 发行版使用的默认 shell。本文将会介绍如何通过添加...

    砸漏
  • 这些 Linux 技巧你应该知道

    来自:酷 壳 - CoolShell 链接:http://33h.co/wipp1

    互联网老辛

扫码关注云+社区

领取腾讯云代金券