linux here用法,Linux命令技巧分享:Bash Heredoc 使用示例

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

5a10666aef77dbb413758d02eefc0b42.png

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

[COMMAND] <

HERE-DOCUMENT

DELIMITER

第一行以可选命令开头,后跟特殊重定向运算符<

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

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

将减号添加到重定向运算符<

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

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

基本的Heredoc例子

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

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

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

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

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

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

> EOF

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

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

您登录的身份为: linuxidc

410aadc8f1f635520f2b7495bd43706f.png

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

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

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

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

> EOF

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

当前的工作目录是: $PWD

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

f029fe0637e841c086e1fc615085e510.png

如果在语句或循环中使用heredoc,请使用<

if true; then

cat <

Line with a leading tab.

EOF

fi

输出:

Line with a leading tab.

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

cat << EOF > linuxidc.txt

当前的工作目录是: $PWD

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

EOF

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

867a1c14bbd99ce6f7dfd85875ca8620.png

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

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

> idc

> linuxmi

> EOF

输出如下:

mdc

lmnuxmm

1372a891dbdb5f64fc4e9efcd0a028a2.png

要将管道数据写入文件:

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/user

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

总结

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

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值