Az itt található dokumentumok használata a Bash-ban Linux alatt

Avatar admin | 2021.04.01. 8 Views 0 Likes 0 Ratings

8 Views 0 Ratings Rate it

Terminálablak egy Linux számítógépes rendszeren.
Fatmawati Achmad Zaenuri / Shutterstock

A furcsa nevű „itt dokumentumok” segítségével a bemeneti / kimeneti átirányítást használhatja a Linux Bash szkriptjeiben. Remek módszer a távoli számítógépen futtatni kívánt parancsok automatizálására.

Itt Dokumentumok

A Linux számos parancsának két vagy három betűje van. Részben ez adja azt a gondolatot, hogy a Linux nehezen megtanulható és tele van arcán parancsokkal. De a Linux egyik legfurcsább neve nem tartozik a rejtélyesen rövidek közé. Az „itt dokumentumok” nem dokumentumok, és az sem igazán világos, hogy mire is utal az „itt”.

Ezek egy viszonylag homályos konstrukció, de hasznosak. Természetesen ez Linux, tehát többféle módon lehet megnyúzni egy macskát. Az itt található dokumentumok bizonyos funkciói más módon is reprodukálhatók. Ezek az alternatív módszerek általában bonyolultabbak. A programozásban és a szkriptelésben a „bonyolultabb” azt is jelenti, hogy „hajlamosabb a hibákra”, és hogy a kódját nehezebb fenntartani.

Itt a dokumentumok valóban kiemelkednek a parancsok automatizálásában, amelyeket távoli számítógépre szeretne küldeni egy szkripten belül létrehozott kapcsolatról. A kapcsolat létrehozása egyszerű, de miután a kapcsolat létrejött, hogyan “pumpálja” a parancsokat a parancsfájlból a távoli számítógép shelljébe? Itt a dokumentumok segítségével ezt nagyon egyszerűen megteheti.

Az itt található dokumentumok alapelvei

Az itt található dokumentum idiomatikus ábrázolása így néz ki:

COMMAND << limit_string
 .
 .
text 
data
variables
.
.
limit_string
  • PARANCS: Ez lehet bármely Linux parancs, amely elfogadja az átirányított bemenetet. Megjegyzés: a echo parancs nem fogadja el az átirányított bevitelt. Ha írnia kell a képernyőre, használhatja a cat parancs, ami igen.
  • <<: Az átirányítási operátor.
  • limit_string: Ez egy címke. Bármi lehet, amíg csak nem jelenik meg a parancsba átirányított adatok listájában. A szöveg, az adatok és a változók lista végének jelölésére szolgál.
  • Adatlista: A parancshoz betáplálandó adatok listája. Tartalmazhat parancsokat, szöveget és változókat. Az adatlista tartalmát egyenként adják be a parancsba, amíg a _limit_string fel nem kerül.

Valószínűleg itt talál példákat olyan dokumentumokra, amelyek „EOF” -t használnak korlátozási karaktersorozatként. Nem támogatjuk ezt a megközelítést. Működik, de az „EOF” a fájl végét jelenti. Azon ritka eseten kívül, amikor a szkriptfájlban az otthoni dokumentum az utolsó dolog, az „EOF” tévesen kerül felhasználásra.

Sokkal jobban olvashatóvá teszi a szkripteket, ha egy korlátozási karakterláncot használ, amely utal arra, amit csinál. Ha parancssorozatot küld egy távoli számítógépre Biztonságos héj (SSH), a „_remote_commands” nevű limit karakterlánc tökéletesen értelmezhető lenne. Nem kell őket aláhúzással kezdeni “_” karakter. Azért tesszük, mert ez a szkriptedben valami rendkívülinek jelöli őket.

Egyszerű példák

Itt használhatja a parancssorban és a szkriptekben található dokumentumokat. Amikor beírja a következőket a terminál ablakába, megjelenik egy>”Sor folytatására figyelmeztető üzenet minden alkalommal, amikor az„ Enter ”gombra kattint. Amikor beírja a „_end_of_text” korlátozási karaktersorozatot, és megnyomja az „Enter” gombot, a webhelyek listája átkerül cat, és megjelennek a terminál ablakában.

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

Ez nem a legérdemesebb gyakorlat, de azt bizonyítja, hogy a parancsnak semmi sem kerül elküldésre, amíg a teljes adatlista össze nem kerül és a limit karakterlánccal nem találkozunk. Az cat parancs nem kap bemenetet, amíg meg nem adja az „_end_of_text” korlátozási karakterláncot, és el nem nyomja az „Enter” gombot.

Ugyanezt megtehetjük egy szkriptben is. Írja be vagy másolja be ezt a példát egy szerkesztőbe, mentse a fájlt “heredoc-1.sh” néven, és zárja be a szerkesztőt.

#!/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

A cikk követése során minden alkalommal, amikor szkriptet készít, meg kell tennie tegye futtathatóvá mielőtt fut. Minden egyes esetben, használja a chmod parancs. Az egyes példákban cserélje le a szkript nevét az itt használt szkript nevére.

chmod +x heredoc-1.sh

Ez a szkript két környezeti változót tartalmaz, $PWD és $BASH_VERSION. A szkript végrehajtásakor a környezeti változó nevét az adatértékük – az aktuális munkakönyvtár és a Bash verziója – váltják fel.

A szkript is használja parancscsere tovább az whoami parancs. A parancs nevét a saját kimenete váltja fel. A teljes szkript kimenetét a cat parancs írja be a terminál ablakába. Futtatjuk a szkriptet úgy, hogy név szerint hívjuk:

./heredoc-1.sh

Ha módosítja a szkriptet, és a limit sztringet idézőjelekbe tekeri az itt található dokumentum első sorába ” " “, Az adatlista szó szerint átkerül az itt található dokumentum parancshoz. A változó nevek a változó értékek helyett jelennek meg, és a parancsok cseréje nem fog megtörténni.

#!/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

Tab karakterek kezelése

Alapértelmezés szerint az adatlista tabulátor karakterei megmaradnak és a terminál ablakába kerülnek. Másolja és mentse ezt a példát „heredoc-2.sh” néven. Tegye futtathatóvá a chmod parancs. Szerkessze a behúzott sorokat, hogy megbizonyosodjon arról, hogy a sor elején egy vagy két tabulátor van, nem szóköz.

#!/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

A füleket a terminál ablakába írják.

Kötőjel hozzáadásával-”Átirányítási operátornak, az itt található dokumentum figyelmen kívül hagyja a vezető fül karaktereket. Mentse el ezt a példát „heredoc-3.sh” néven, és futtathatóvá tegye.

#!/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

A füleket figyelmen kívül hagyja. Lehet, hogy ez triviálisnak tűnik, de a szkriptek behúzott szakaszai miatt ügyes módja a fülek vezetésének.

A hurkok és más logikai konstrukciók általában behúzódnak. Ha az itt található dokumentum egy szkript behúzott szakaszában található, kötőjel-”Az átirányítás operátorral eltávolítja a vezető fül karakterek által okozott formázási problémákat.

#!/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

Átirányítás egy fájlba

Az itt a dokumentumhoz használt parancs kimenete átirányítható egy fájlba. Használja a “>”(Hozza létre a fájlt) vagy„>>”(Hozza létre a fájlt, ha nem létezik, csatolja a fájlhoz, ha van) átirányítási operátorok utána a limit szöveg az itt található dokumentum első sorában.

Ez a szkript „heredoc-4.sh”. Kimenetét átirányítja egy „session.txt” nevű szövegfájlba.

#!/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

A kimenet átadása egy másik parancsra

Az itt dokumentumban használt parancs kimenete egy másik parancs bemeneteként továbbítható. Használat a cső|” operátor utána a limit szöveg az itt található dokumentum első sorában. Az itt található dokumentum parancs kimenetét fogjuk átadni, cat, be sed. Szeretnénk helyettesítsen minden előfordulást az „a” betűből az „e” betűvel.

Nevezze el ezt a szkriptet: heredoc-5.sh.

#!/bin/bash

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

A „Gaak” szót „Geek” -re javítják.

Paraméterek küldése egy funkcióhoz

Az itt dokumentummal használt parancs a szkript függvénye lehet.

Ez a szkript néhány járműadatot átad egy funkciónak. A függvény úgy olvassa az adatokat, mintha egy felhasználó gépelte volna be. Ezután kinyomtatják a változók értékeit. Mentse el ezt a szkriptet „heredoc-6.sh” néven.

#!/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

A jármű részleteit a terminál ablakába írják.

E-mail létrehozása és küldése

Használhatunk egy itt található dokumentumot e-mail összeállításához és elküldéséhez. Ne feledje, hogy paramétereket adhatunk át az átirányítási operátor előtti parancsnak. Mi vagyunk a Linux használatával mail parancs nak nek küldjön e-mailt a helyi levelező rendszeren keresztül a „dave” nevű felhasználói fiókba. Az -s (tárgy) opció lehetővé teszi számunkra az e-mail tárgyának megadását.

Ez a példa a „heredoc-7.sh” szkriptet alkotja.

#!/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

Nincs látható kimenet ebből a szkriptből. De amikor ellenőrizzük a leveleinket, látjuk, hogy az e-mailt összeállították, elküldték és kézbesítették.

mail

Dokumentumok használata itt SSH-val

Itt a dokumentumok hatékony és kényelmes módja néhány parancs végrehajtásának egy távoli számítógépen, miután SSH kapcsolat létrejött. Ha SSH-kulcsokat állított be a két számítógép között, a bejelentkezési folyamat teljesen automatikus lesz. Ebben a gyors és piszkos példában a rendszer kéri a távoli számítógép felhasználói fiókjának jelszavát.

Ez a szkript „heredoc-8.sh”. Csatlakozni fogunk egy „remote-pc” nevű távoli számítógéphez. A felhasználói fiók neve „dave”. Használjuk a -T (letiltani az álterminális allokációt) opciót, mert nincs szükségünk interaktív álterminálra a hozzárendeléshez.

A szkript „végezzen itt némi munkát” részben átadhatjuk a parancsok listáját, ezeket a távoli számítógépen hajtják végre. Természetesen egyszerűen felhívhat egy szkriptet, amely a távoli számítógépen volt. A távoli parancsfájl tartalmazhatja az összes végrehajtani kívánt parancsot és rutint.

A szkriptünk – a heredoc-8.sh – mindössze annyit fog tenni, hogy frissíti a távoli számítógép kapcsolati naplóját. A felhasználói fiók, valamint az idő- és dátumbélyegző naplózásra kerül egy szöveges fájlba.

#!/bin/bash

ssh -T dave@remote-pc.local << _remote_commands

# do some work in here

# update connection log
echo $USER "-" $(date) >> /home/dave/conn_log/script.log
_remote_commands

Amikor futtatjuk a parancsot, a rendszer kéri a jelszó megadását a távoli számítógép.

./heredoc-8.sh

Megjelenik néhány információ a távoli számítógépről, és visszatérünk a parancssorba.

A távoli számítógépet használhatjuk cat a csatlakozási napló ellenőrzéséhez:

cat conn_log/script.log

Minden kapcsolat fel van sorolva számunkra.

ÖSSZEFÜGGŐ: SSH-kulcsok létrehozása és telepítése a Linux Shellből

Furcsa név, ügyes tulajdonságok

Itt a dokumentumok furcsaak, de hatékonyak, különösen akkor, ha parancsokat küldenek egy távoli számítógépre. Egyszerű kérdés lenne egy biztonsági másolat készítése a parancsfájl használatával rsync. Ezután a parancsfájl csatlakozhat a távoli számítógéphez, ellenőrizheti a fennmaradó tárhelyet, és figyelmeztető e-mailt küldhet, ha a hely kevés.

ÖSSZEFÜGGŐ: Hogyan készítsünk biztonsági másolatot a Linux rendszerről




Forrás link


8 Views 0 Ratings Rate it

  • Minden jog fenntartva 2019-2020. Hogyankészítsek.Hu Impresszum Adatkezelési szabályok