如何在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
  • 閱讀 ( 36 )
  • 分類:網際網路

你可能感興趣的文章

2021年面向開發者、雲工程師和devops的5大linux課程

... 本課程將帶您瞭解Linux的“如何”和“為什麼”,並展示各種Linux命令的工作方式、它們的真實結構以及記住這些命令的正確方法。 ...

  • 發佈於 2021-03-11 10:29
  • 閲讀 ( 59 )

頂級網站和書籍,讓您成為linux命令列英雄

...bash是什麼、不同的模式(互動式和非互動式)以及它是如何產生的基礎知識開始,這個站點提供了一個全面的背景知識來幫助您理解命令列的機制。 ...

  • 發佈於 2021-03-14 07:04
  • 閲讀 ( 60 )

如何在linux上安裝和使用powershell

... 在本文中,我將向您展示如何在Linux上安裝、執行和使用PowerShell! ...

  • 發佈於 2021-03-16 02:34
  • 閲讀 ( 53 )

最好的,最快的,最堅固的usb快閃記憶體驅動器,你可以現在購買

...更多的特性。瞭解更多關於Bash-on-Windows的資訊,從您應該如何以及為什麼安裝它,到您可能不知道的隱藏特性。 ...

  • 發佈於 2021-03-17 01:06
  • 閲讀 ( 51 )

如何在windows10上獲得linux bash shell

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

  • 發佈於 2021-03-21 11:48
  • 閲讀 ( 60 )

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

...在這篇短文中,我們將探討Bash是什麼,它做什麼,以及如何開始使用它。 ...

  • 發佈於 2021-03-28 13:14
  • 閲讀 ( 62 )

關於linux中bash for loops的所有知識

... 第一行告訴執行這個程式的人如何執行它(即使用bash直譯器)。第二個命令與您在命令列中輸入的任何其他命令一樣。將該檔案另存為hello_世界.sh,然後: ...

  • 發佈於 2021-03-29 06:22
  • 閲讀 ( 59 )

哪個linux shell最好?比較了5種常見的貝殼

...你的計算機需要一個翻譯層。這介於你告訴它做什麼和它如何理解之間。 ...

  • 發佈於 2021-03-30 18:45
  • 閲讀 ( 51 )

如何使用受限shell來限制linux使用者可以做什麼

...改其目錄,您可以控制他們可以訪問哪些命令。下面介紹如何在Linux上設定受限shell。 受限炮彈 受限shell不是另一個shell。這是標準外殼的另一種模式。Bash、Korn、Fish和其他shell都可以在受限shell模式下啟動。在本文中,我們將...

  • 發佈於 2021-03-31 10:57
  • 閲讀 ( 56 )

如何使用chsh在linux上更改預設shell

Bash不是唯一的Linux shell。很容易嘗試其他的shell,比如非常流行的Zsh。找到一個您喜歡的shell後,使用chsh命令將其設定為預設shell。我們會教你怎麼做。 為什麼貝殼很重要 shell位於您和作業系統之間。它在終端視窗內提供環境...

  • 發佈於 2021-04-02 06:04
  • 閲讀 ( 66 )
四十幾是
四十幾是

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦