如何在linux上的bash中使用“heredocuments”

这个名字很奇怪的“heredocuments”允许您在Linux上的Bash脚本中使用输入/输出重定向。他们是一个伟大的方式来自动化命令,你需要在远程计算机上运行。...

这个名字很奇怪的“heredocuments”允许您在Linux上的Bash脚本中使用输入/输出重定向。他们是一个伟大的方式来自动化命令,你需要在远程计算机上运行。

这里是文件

Linux中的许多命令都有两个或三个字母的名称。这在一定程度上导致了这样一种观念:Linux很难学习,而且充满了神秘的命令。但是Linux中最奇怪的名字之一并不是一个神秘的短名字。“Here documents”不是文档,也不清楚“Here”指的是什么。

它们是一个相对模糊的结构,但它们是有用的。当然,这是Linux操作系统,所以剥猫皮的方法不止一种。这里提供的一些功能可以通过其他方式复制。这些替代方法通常更复杂。在编程和脚本中,“更复杂”也意味着“更容易出现错误”,而且代码更难维护。

这里真正的excel文档是自动化命令,您希望通过脚本中建立的连接将这些命令发送到远程计算机。建立连接很容易,但是一旦建立了连接,如何将脚本中的命令“泵送”到远程计算机的shell中?这里的文档让您可以非常简单地做到这一点。

文件的基本原则

here文档的惯用表示形式如下所示:

COMMAND << limit_string . . text data variables . . limit_string
  • COMMAND:这可以是任何接受重定向输入的Linux命令。注意,echo命令不接受重定向的输入。如果您需要写入屏幕,您可以使用cat命令,它确实可以。
  • <<:重定向操作符。
  • 限制字符串:这是一个标签。它可以是您喜欢的任何东西,只要它不出现在您重定向到命令的数据列表中。它用于标记文本、数据和变量列表的结尾。
  • 数据列表:要提供给命令的数据列表。它可以包含命令、文本和变量。数据列表的内容一次输入一行,直到遇到\u limit \u字符串。

您可能会在这里看到使用“EOF”作为限制字符串的文档示例。我们不赞成这种做法。它可以工作,但“EOF”意味着“文件结束”。除了极少数情况下主文档是脚本文件中的最后一个内容外,“EOF”被错误地使用。

如果您使用一个引用您正在执行的操作的限制字符串,它将使您的脚本更具可读性。如果您通过secureshell(SSH)向远程计算机发送一系列命令,那么一个名为“\u remote\u commands”的限制字符串将非常有意义。您不需要用下划线“216;”字符开头。我们这样做是因为它在你的剧本中把它们标记为不同寻常的东西。

简单的例子

您可以在命令行和脚本中使用此处的文档。在终端窗口中键入以下内容时,每次点击“Enter”时,都会看到“&gt;”行继续提示。键入“\u text的结束”限制字符串并点击“Enter”时,网站列表将传递给cat,并显示在终端窗口中。

cat << _end_of_text How-To Geek Review Geek LifeSavvy CloudSavvy IT MindBounce _end_of_text

如何在linux上的bash中使用“heredocuments”

这不是最有价值的练习,但它确实演示了在整理整个数据列表并遇到限制字符串之前,不会向命令发送任何内容。在输入限制字符串“\u end\u of \u text”并按“enter”键之前,cat命令不会接收任何输入。

如何在linux上的bash中使用“heredocuments”

我们可以在剧本里做同样的事情。在编辑器中键入或复制此示例,将文件另存为“heredoc-1.sh”,然后关闭编辑器。

#!/bin/bash cat << "_end_of_text" Your user name is: $(whoami) Your current working directory is: $PWD Your Bash version is: $BASH_VERSION _end_of_text

在阅读本文时,每次创建脚本时,都需要使其在运行之前可执行。在每种情况下,使用chmod命令。将每个示例中的脚本名称替换为此处使用的脚本名称。

chmod +x heredoc-1.sh

如何在linux上的bash中使用“heredocuments”

这个脚本包含两个环境变量,$PWD和$BASH\u VERSION。执行脚本时,环境变量名将替换为当前工作目录和Bash版本中的数据值。

该脚本还对whoami命令使用命令替换。命令的名称将替换为它自己的输出。整个脚本的输出由cat命令写入终端窗口。我们通过名字来运行脚本:

./heredoc-1.sh

如何在linux上的bash中使用“heredocuments”

如果修改脚本并将限制字符串括在here文档的第一行的引号“”中,则数据列表将逐字传递给here文档命令。将显示变量名而不是变量值,并且不会进行命令替换。

#!/bin/bash cat <<- "_end_of_text" Your user name is: $(whoami) Your current working directory is: $PWD Your Bash version is: $BASH_VERSION _end_of_text

./heredoc-1.sh

如何在linux上的bash中使用“heredocuments”

处理制表符

默认情况下,数据列表中的制表符将保留并写入终端窗口。复制这个例子并保存为“herdeoc-2.sh”。使用chmod命令使其可执行。编辑缩进的行,以确保它们在行首有一个或两个制表符,而不是一系列空格。

#!/bin/bash cat << _end_of_text Your user name is: $(whoami) Your current working directory is: $PWD Your Bash version is: $BASH_VERSION _end_of_text ./heredoc-2.sh

如何在linux上的bash中使用“heredocuments”

选项卡将写入终端窗口。

通过向重定向操作符添加破折号“-”,here文档将忽略前导制表符。将此示例另存为“heredoc-3.sh”,并使其可执行。

#!/bin/bash cat <<- _end_of_text Your user name is: $(whoami) Your current working directory is: $PWD Your Bash version is: $BASH_VERSION _end_of_text ./heredoc-3.sh

如何在linux上的bash中使用“heredocuments”

这些选项卡将被忽略。这看起来可能很琐碎,但这是一种处理前导制表符的好方法,因为前导制表符是脚本的缩进部分。

循环和其他逻辑结构通常是缩进的。如果您的here文档包含在脚本的缩进部分中,则在重定向操作符中使用破折号“-”可以消除由前导制表符引起的格式问题。

#!/bin/bash if true; then cat <<- _limit_string Line 1 with a leading tab. Line 2 with a leading tab. Line 3 with a leading tab. _limit_string fi

重定向到文件

与here文档一起使用的命令的输出可以重定向到一个文件中。在here文档第一行的limit字符串后面使用“&gt;”(创建文件)或“&gt;”(如果文件不存在,则创建文件,如果文件存在,则附加到文件)重定向运算符。

这个脚本是“heredoc-4.sh”。它将把输出重定向到一个名为会话.txt.”

#!/bin/bash cat << _end_of_text > session.txt Your user name is: $(whoami) Your current working directory is: $PWD Your Bash version is: $BASH_VERSION _end_of_text ./heredoc-4.sh cat session.text

如何在linux上的bash中使用“heredocuments”

将输出管道化到另一个命令

here文档中使用的命令的输出可以通过管道作为另一个命令的输入。在here文档第一行的limit字符串后面使用pipe“|”操作符。我们将把here document命令cat的输出导入sed。我们想用字母“e”替换字母“a”的所有出现处。

将此脚本命名为“heredoc-5.sh”

#!/bin/bash cat << _end_of_text | sed 's/a/e/g' How To Gaak _end_of_text ./heredoc-5.sh

“Gaak”改为“Geek”

如何在linux上的bash中使用“heredocuments”

向函数发送参数

与here文档一起使用的命令可以是脚本中的函数。

此脚本将一些车辆数据传递到函数中。函数读取数据时,就好像它是由用户键入的一样。然后打印变量的值。将此脚本另存为“heredoc-6.sh”。

#!/bin/bash # the set_car_details() function set_car_details () { read make read model read new_used read delivery_collect read location read price } # The here document that passes the data to set_car_details() set_car_details << _mars_rover_data NASA Perseverance Rover Used Collect Mars (long,lat) 77.451865,18.445161 2.2 billion _mars_rover_data # Retrieve the vehicle details echo "Make: $make" echo "Model: $model" echo "New or Used: $new_used" echo "Delivery or Collection: $delivery_collect" echo "Location: $location" echo "Price \$: $price" ./heredoc-6.sh

如何在linux上的bash中使用“heredocuments”

车辆详细信息将写入终端窗口。

创建和发送电子邮件

我们可以使用here文档来撰写和发送电子邮件。注意,我们可以将参数传递给重定向操作符前面的命令。我们使用Linux mail命令通过本地邮件系统向名为“dave”的用户帐户发送电子邮件。-s(主题)选项允许我们指定电子邮件的主题。

此示例形成脚本“heredoc-7.sh”

#!/bin/bash article="Here Documents" mail -s 'Workload status' dave << _project_report User name: $(whoami) Has completed assignment: Article: $article _project_report ./heredoc-7.sh

如何在linux上的bash中使用“heredocuments”

此脚本没有可见的输出。但当我们检查邮件时,我们发现邮件是由人撰写、发送和传递的。

mail

如何在linux上的bash中使用“heredocuments”

将here文档与ssh一起使用

这里的文档是在建立SSH连接后在远程计算机上执行某些命令的一种强大而方便的方法。如果您在两台计算机之间设置了SSH密钥,那么登录过程将是完全自动的。在这个又快又脏的例子中,会提示您输入远程计算机上用户帐户的密码。

这个脚本是“hereoc-8.sh”。我们要连接到一台名为“远程pc”的远程计算机。用户帐户称为“dave”。我们使用-T(disable伪终端分配)选项,因为我们不需要为我们分配一个交互式伪终端。

在脚本的“在这里做一些工作”部分,我们可以传递一个命令列表,这些命令将在远程计算机上执行。当然,您可以调用远程计算机上的脚本。远程脚本可以保存您想要执行的所有命令和例程。

我们的script-heredoc-8.sh要做的就是更新远程计算机上的连接日志。用户帐户和时间和日期戳被记录到一个文本文件中。

#!/bin/bash ssh -T [email protected] << _remote_commands # do some work in here # update connection log echo $USER "-" $(date) >> /home/dave/conn_log/script.log _remote_commands

当我们运行命令时,系统会提示我们输入远程计算机上帐户的密码。

./heredoc-8.sh

如何在linux上的bash中使用“heredocuments”

将显示有关远程计算机的一些信息,并返回到命令提示符。

如何在linux上的bash中使用“heredocuments”

在远程计算机上,我们可以使用cat检查连接日志:

cat conn_log/script.log

如何在linux上的bash中使用“heredocuments”

为我们列出了每个连接。

相关:如何从Linux Shell创建和安装SSH密钥

名字奇怪,五官整洁

这里的文档很奇怪,但功能强大,尤其是用于向远程计算机发送命令时。使用rsync编写备份例程很简单。然后,脚本可以连接到远程计算机,检查剩余的存储空间,并在空间不足时发送警报电子邮件。

相关:如何备份Linux系统

  • 发表于 2021-04-14 17:56
  • 阅读 ( 167 )
  • 分类:互联网

你可能感兴趣的文章

2021年面向开发者、云工程师和devops的5大linux课程

... 本课程将带您了解Linux的“如何”和“为什么”,并展示各种Linux命令的工作方式、它们的真实结构以及记住这些命令的正确方法。 ...

  • 发布于 2021-03-11 10:29
  • 阅读 ( 248 )

如何在linux上安装和使用powershell

... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 308 )

Windows10中LinuxBashShell快速指南

...更多的特性。了解更多关于Bash-on-Windows的信息,从您应该如何以及为什么安装它,到您可能不知道的隐藏特性。 ...

  • 发布于 2021-03-17 01:06
  • 阅读 ( 194 )

如何在windows10上获得linux bash shell

... 如何在windows10上安装linux bash shell ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 288 )

在linux中,“bash”是什么意思?

...在这篇短文中,我们将探讨Bash是什么,它做什么,以及如何开始使用它。 ...

  • 发布于 2021-03-28 13:14
  • 阅读 ( 452 )

如何在linux上的bash中设置环境变量

Linux上有多种类型的环境变量。了解如何查看它们,为本地和远程登录创建它们,并使它们在重新启动后仍然有效。 环境变量的工作原理 启动终端窗口及其内部的shell时,会引用一组变量,以确保shell配置正确。这些变量还确...

  • 发布于 2021-04-02 06:44
  • 阅读 ( 222 )

linux下如何使用which命令

...在shell中的,因此Bash不必费劲地查找这些命令。 但是Bash如何定位其他命令、程序和外部独立二进制文件呢?Bash使用路径,实际上是一组路径,每个路径指向一个目录。然后,它在每个目录中搜索与您试图运行的命令或程序匹配...

  • 发布于 2021-04-02 20:07
  • 阅读 ( 172 )

如何在linux上使用chroot命令

...法是安装足够的操作系统,以完成所需的任务。通过查看如何使用chroot环境来回答“what is required”问题。 一些常见用途是: 软件开发和产品验证。开发人员编写软件,产品验证团队(PV)对其进行测试。有时PV发现的问题无法...

  • 发布于 2021-04-03 03:19
  • 阅读 ( 200 )

windows10的新bashshell所能做的一切

...些指南汇总到一个大列表中。 windows上linux入门 相关:如何在windows10上安装和使用Linux Bash Shell 您可以在任何版本的windows10(包括windows10home)上安装Linux环境和bashshell。但是,它确实需要64位版本的Windows10。您只需启用Windows Subs...

  • 发布于 2021-04-06 14:44
  • 阅读 ( 265 )

如何在windows10的ubuntubashshell中更改用户帐户

...改这些凭据。 用户帐户在linux环境中的工作方式 相关:如何在windows10上安装和使用Linux Bash Shell 当您通过在安装后启动新的Linux发行版来设置它时,系统会要求您为bashshell创建一个用户帐户。Windows将其称为“UNIX用户帐户”。因...

  • 发布于 2021-04-06 15:47
  • 阅读 ( 186 )
四十几是
四十几是

0 篇文章

相关推荐