代码编织梦想

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

语法介绍

HereDoc 的语法如下:

[COMMAND] <<[-] 'DELIMITER'
  HERE-DOCUMENT
DELIMITER
  • 第一行以指定的命令开头,后跟特殊的重定向运算符<<和结束符。
  • 可以使用任何字符串作为结束符,最常用的是 EOFEND
  • 如果结束符不带引号,则 shell 将替换所有变量、命令和特殊字符,然后再将 here-document 行传递给命令。
  • 将减号附加到重定向运算符, 即 <<-,将导致输出时删除heredoc内行首的所有\t, 但不会删除空格。
  • 最后一行以结束符结尾。结束符前面不允许有空格。

基本示例

Heredoc 经常和 cat 命令一起使用。

示例-1. 引号作用于结束符将不替换

cat << EOF
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

Output就是:

The current working directory is: /home/abc
You are logged in as: abc

那么如果把结束符用双引号括起来会怎么样呢? 那么,环境变量就不会被替换,而命令也不会被执行。

$ cat << "EOF"
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

The current working directory is: $PWD
You are logged in as: $(whoami)

示例-2. <<后加上减号-则在输出时将Heredoc块内的行首的所有\t消除

注意,如果以空格开头,则空格不会被消除;只会消除行开头的\t,哪怕是多个\t,都会被消除。

cat << EOF
    Line without a leading tab.
EOF

Line without a leading tab.

示例-3. 重定向输出到文件

cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

cat file.txt
The current working directory is: /home/abc
You are logged in as: abc

示例-4. 管道输出到sed

下面的例子将单词中的o替换成a

cat <<'EOF' |  sed 's/o/a/g'
Hellooo
Woorld
EOF

Hellaaa
Waarld

也可以先管道给sed,再输出到文件。

cat <<'EOF' |  sed 's/l/e/g' > file.txt
Hello
World
EOF

cat file.txt
Heeeo
Wored

使用Heredoc来操作SSH

要通过ssh在远程系统上执行多个命令,Heredoc是最方便和最简单的方式之一。

示例-5. 使用不带引号的结束符时,请确保转义所有变量、命令和特殊字符,否则它们将在本地插值

ssh -T def@server_side.com << EOF
echo "The current local working directory is: $PWD"
echo "The current remote working directory is: \$PWD"
EOF
Copy
The current local working directory is: /home/abc
The current remote working directory is: /home/def

注意,上面第二个$PWD前面需要转义,因为此时想取远程机器的PWD变量。

示例-6. 用户输入密码,Heredoc配合expect,在远程机器上执行命令

以下是一个shell脚本的内容。这个脚本能够接收用户的输入作为密码,然后以此访问一个远程机器。

#!/usr/bin/sh

echo -n "Please input password for remote system:"
read -s password

/usr/bin/expect <<- EOF | tee /home/abc/123.txt
spawn ssh abc@some_host ls -l
set timeout 5
expect "abc@some_host's password: "
send -- "$password\r"
expect eof
EOF

(END)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/nirendao/article/details/129675974

php类属性、类常量简介__荣耀之路_的博客-爱代码爱编程

属性 类的变量成员叫做“属性”,或者叫“字段”、“特征”。属性声明是由关键字public、protected或private开头,然后跟一个普通的变量声明来组成。属性中的变量可以初始化,但是初始化的值必须是常数,常数是指PHP脚本在编译阶段时就可以得到其值,而不依赖于运行时的信息才能求值。 为了向后兼容PHP4、PHP5声明属性依然可以直接使用关键字va

php基础——字符串-爱代码爱编程

在底层,字符串是以字符数组的形式保存的 $a = '123'; echo $a[0]; // 1 echo strlen($a); // 3 字符串简介 基本概念 一个字符串就是由一系列的字符组成,其中每个字符等同于一个字节字符串最大可以达到 2GB一个字符串可以用 4 种方式表达代码示例 echo $a = 'abc'; ech

厨师简介-爱代码爱编程

Chef是一个令人难以置信的工具,但是尽管它始于2008/2009,但它仍然缺乏有效的快速入门,甚至还没有一个正式的“ hello world” –因此,当您拼命搜索教程/示例/使用时,花很长时间才能真正入门案件。 现有的快速入门或教程花费的时间太长,无法解释范围或Chef在做什么。 这真的很不幸,因

读写锁厨师_厨师简介-爱代码爱编程

读写锁厨师 Chef是令人难以置信的工具,但尽管它始于2008/2009,但仍缺乏有效的快速入门,甚至还没有官方的“ hello world” –因此,在您拼命搜索教程/示例/使用时,花很长时间才能真正上手案件。 现有的快速入门或教程花费的时间太长,无法解释范围或Chef在做什么。 这确实是不幸的,

php常识,PHP 基础知识-爱代码爱编程

基本语法 PHP标记 ?> //短标记 ?> 注释 PHP 支持 C,C++ 和 Unix Shell 风格(Perl 风格)的注释。 echo "This is a test"; // This is a one-line c++ style comment /* This is a multi line comment

PHP练习笔记(1)简介、echo 和 print 语句、EOF(heredoc) 使用说明、数据类型、类型比较-爱代码爱编程

1.PHP 简介 PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。 PHP 是什么? PHP (全称:PHP:Hypertext Preprocessor,即“PHP:超文本预处理器”)是一种通用开源脚本语言。PHP 脚本在服务器上执行。PHP 文件是什么? PHP 文件可包含文本、HTML、JavaScript代码和PHP代码PHP

php详细简介,php 简介-爱代码爱编程

PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。 PHP 能做什么? PHP 可以生成动态页面内容 PHP 可以创建、打开、读取、写入、关闭服务器上的文件 PHP 可以收集表单数据 PHP 可以发送和接收 cookies PHP 可以添加、删除、修改您的数据库中的数据

php两组以逗号隔开后求相同值6,PHP 笔记——基础-爱代码爱编程

一、PHP 简介 1. PHP是什么 PHP:Hypertext Preprocessor,即超文本预处理器。 PHP是一种跨平台、服务器端、可嵌入HTML文件的脚本语言。 嵌入了PHP代码的HTML文件称为PHP文件,扩展名通常为.php。 2. PHP工作流程 浏览器 主要功能是显示HTML网页内容,并让用户与这些网页内容产生互动

整数83可以表示为php,PHP变量类型-爱代码爱编程

简介 PHP支持9种原始数据类型。 4种标量类型: boolean布尔型 integer 整形 float 浮点型(也称作double) string 字符串 3种复合类型: array 数组 object 对象 callable 可调用 2种特殊类型 resource 资源 null 无类型 为了确保代码的易读性,我们通常

linux中here文档,Linux下Bash Heredoc(Here document)的用法及基本示例-爱代码爱编程

本文讲解在Linux操作系统下Bash Heredoc(Here document)的用法,及基本的Heredoc示例、将Heredoc和SSH一起使用。 简介 在编写shell脚本时,您可能需要将多行文本或代码传递给交互式命令(例如tee、cat或sftp)。 在Bash和Zsh等其他shell中,Here document(Heredoc

持续集成与持续部署(六)01-CircleCI——使用简介-持续集成工具 & config.yml完整配置-爱代码爱编程

持续集成与持续部署(六)01-CircleCI——使用简介-持续集成工具 & config.yml完整配置 CircleCI 使用简介 注册 CircleCI 打开 CircleCI 官方网站,使用您的GitHub帐户登录。 进行授权: 启动存储库检查要在 CircleCI 上管理的存储库的开关按钮。 编写 config.

hadoop集群---方便的脚本-爱代码爱编程

目录 为什么编写脚本? myhadoop.sh 群起集群、关闭集群脚本 1、配置 2、启用 jpsall 查看三台主机进程脚本 1、配置 2、启用 xsync 分发脚本 1、配置 2、启用 为什么编写脚本? 方便 myhadoop.sh 群起集群、关闭集群脚本 1、配置 在 root/bin 目录下创建脚本 (在

linux-inotify工具监控文件状态变化总结-爱代码爱编程

linux-inotify工具监控文件状态变化总结 大纲 1 安装2 使用 Inotify 它是在内核 2.6.13 版本中引入的一个新功能,它为用户态监视文件系统的变化提供了强大的支持,允许监控程序打开一个独立文件描

perl中here文档(=<<符号)的使用简介-爱代码爱编程

Perl中的   =<< Perl中的here文档又称作heredoc、here字串或here脚本,是可以在shell命令行和程序语言(像Perl、PHP、Python等)里定义一个字串的方法。 使用概述: 1.使用  =<<  符号定义标识符名称。起始标识符与 =<<之间不能有空格。 2.标识符可以用任

tcpdump抓包并用于wireshark解析_tcpdump导出文件 wireshark解析-爱代码爱编程

tcpdump抓包并用于wireshark解析 抓包工具需要用到抓包工具的常见运维场景 tcpdump抓包工具wireshark介绍 抓包工具 抓包工具:是拦截查

liunx下的进程程序替换_linux进程代码段能被置换出去吗-爱代码爱编程

文章目录 前言1.进程替换1.为啥要进行进程程序替换2.如何进程程序替换呢?3.程序替换失败以及返回值的理解4.进程程序替换的原理 2.进程程序替换接口1.execl2.exclp3.execv4.exe