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

2020-09-20 0 417 百度已收录

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

Linux命令技巧分享:Bash 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

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

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

linuxidc@linuxidc:~/linuxidc.com$ cat <<- “EOF”
> 当前的工作目录是: $PWD
> 您登录的身份为: $(whoami)
> EOF

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

当前的工作目录是: $PWD
您登录的身份为: $(whoami)

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

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

if true; then
    cat <<- EOF
    Line with a leading tab.
    EOF
fi

输出:

Line with a leading tab.

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

cat << EOF > linuxidc.txt
当前的工作目录是: $PWD
您登录的身份为: $(whoami)
EOF

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

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

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

linuxidc@linuxidc:~/linuxidc.com$ cat <<‘EOF’ |  sed ‘s/i/m/g’
> idc
> linuxmi
> EOF

输出如下:

mdc
lmnuxmm

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

要将管道数据写入文件:

linuxidc@linuxidc:~/linuxidc.com$ cat <<‘EOF’ |  sed ‘s/i/m/g’ > 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/user

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

总结

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

栗子博客 软件 Linux命令技巧分享:Bash Heredoc 使用示例 https://www.lizi.tw/soft/14540.html

常见问题
  • 1、杰齐1.7仅适用于PHP5.2 2、需Zend支持 3、尽量使用宝塔面板 4、尽量使用Windows 系统,关关对Linux支持不太友好。
查看详情

相关文章

评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务

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

分享本文封面