Podivně pojmenované „tady dokumenty“ umožňují používat vstup / výstup přesměrováním uvnitř Bash skripty na Linux. Jsou to skvělý způsob, jak automatizovat příkazy je třeba spustit na vzdáleném počítači.
zde Dokumenty
Mnoho příkazů v Linuxu mají dva nebo tři jména dopis. Částečně je to, co vede k představě, že Linux je těžké se naučit a plný tajemných příkazů. Ale jeden z nejdivnějších jmen v Linuxu není jeden z těch krátkých záhadně. „Tady dokumenty“ nejsou dokumenty, a to ve skutečnosti není jasné, co je „tady“ se rozumí, a to buď.
Jsou relativně temný konstrukt, ale jsou užitečné. Samozřejmě, je to Linux, takže je tu více než jeden způsob, jak kůže kočku. Některé z funkcí poskytovaných zde dokumenty lze reprodukovat i jinými způsoby. Tyto alternativní metody jsou obvykle složité. V programování a skriptování, „více komplikuje“ také znamená „více náchylný k chybám,“ a že váš kód je těžší udržet.
Kde tady dokumenty opravdu vynikat v automatizaci příkazů, které chcete odeslat do vzdáleného počítače od navázáno spojení zevnitř skriptu. Takže spojení je snadné, ale jakmile bylo dosaženo spojení, jak si „pumpa“ své příkazy ze skriptu do pláště na vzdáleném počítači? Zde dokumenty umožňují udělat velmi jednoduše.
Základní principy Zde Dokumenty
Idiomatická reprezentace tady dokument vypadá takto:
Příkaz & lt; & lt; limit_string . . text data proměnné . . limit_string
-
PŘÍKAZ
: To může být jakýkoli povel, Linux, který přijímá přesměrovanou vstup. Všimněte si, že
echopříkaz nepřijímá přesměrovanou vstup . Pokud potřebujete psát na obrazovku, můžete použítkočkapříkaz, který dělá . - & Lt; & lt; : Operátor přesměrování.
- limit_string : Toto je štítek. Může to být cokoli chcete tak dlouho, dokud se neobjeví v seznamu údajů přesměrováváte do příkazu. To se používá k označení konce textu, dat a seznam proměnných.
- Seznam dat : Seznam údajů, které mají být přiváděny do příkazu. Může obsahovat příkazy, text a proměnné. Obsah seznamu dat jsou přiváděny do příkazového řádku jeden v okamžiku, dokud se nenarazí na _limit_string.
Budete pravděpodobně vidět ukázky zde dokumenty, které používají „OSZ“ jako mezní řetězce. tento přístup Nechceme preferovat. Funguje to, ale „OSZ“ znamená „konec souboru“. Kromě výjimečných případech, kdy domácí dokument je poslední věc, kterou v souboru skriptu, „EOF“ je používán nesprávně.
To bude vaše skripty mnohem čitelnější, pokud použijete limitní řetězec, který odkazuje na to, co děláte. Pokud posíláte sérii příkazů ke vzdálenému počítači přes
Secure Shell
(SSH), limit řetězec s názvem něco jako „_remote_commands“ by perfektní smysl. Nemusíte se jim začínají podtržítkem „
_
“Charakter. Děláme to proto, že označí je jako něco neobvyklého ve vašem skriptu.
Jednoduché příklady
Můžete zde používat dokumenty na příkazovém řádku a ve skriptech. Pokud zadáte následující v okně terminálu, uvidíte „
& Gt;
“Pokračování řádku výzvu pokaždé, když hit‚Enter.‘ Při zadání „_end_of_text“ mezní řetězec a stiskněte „Enter“, seznam webových stránek je předán
kočka,
a jsou zobrazeny v okně terminálu.
cat & lt; & lt; _end_of_text Jak-k geek Recenze Geek. LifeSavvy CloudSavvy IT MindBounce _end_of_text
To není zrovna užitečné cvičení, ale to prokázat, že nic je odeslán příkaz, dokud není tříděny celý seznam dat a limit řetězec se setkal. . \ T
kočka
Příkaz neobdrží žádný vstup, dokud nezadáte limit řetězec „_end_of_text“ a stiskněte klávesu „Enter“.
Můžeme to udělat totéž ve skriptu. Typ nebo kopírovat tento příklad do editoru, uložte soubor jako „heredoc-1.sh“ a zavřete editor.
#! / Bin / bash kat & lt; & lt; "_End_of_text" Vaše uživatelské jméno je: $ (whoami) Váš současný pracovní adresář: $ PWD Váš Bash verze je: $ BASH_VERSION _end_of_text
Jak budete postupovat podle tohoto článku se při každém vytvoření skript, budete muset
aby byl spustitelný
před tím, než se spustí. V každém případě,
použijte
chmod
příkaz
. Nahraďte název skriptu v každém příkladu pro název skriptu zde použité.
chmod + x heredoc-1.sh
Tento skript obsahuje dvě proměnné prostředí,
$ PWD
a
$ BASH_VERSION
. Jména proměnných prostředí jsou nahrazeny jejich datových hodnot-aktuálního pracovního adresáře a verzi Bash-když skript je vykonán.
Skript také používá
příkaz substituce
na
. \ t
kdo jsem
příkaz
. Název příkazu je nahrazen svým vlastním výkonem. Výstupem z celého skriptu je zapsána do okna terminálu příkazem cat. My spuštění skriptu voláním jej podle jména:
./ heredoc-1.sh
Máte-li upravit skript a zabalit limit řetězec v prvním řádku tady dokumentovat v uvozovkách“
"
„Seznam dat je předán zde dokumentu příkaz doslovně. Názvy proměnných jsou zobrazeny namísto hodnot proměnných, a příkaz nahrazení nebude konat.
#! / Bin / bash kat & lt; & lt; - "_end_of_text" Vaše uživatelské jméno je: $ (whoami) Váš současný pracovní adresář: $ PWD Váš Bash verze je: $ BASH_VERSION _end_of_text
Manipulace s tabulátory
Ve výchozím nastavení bude na kartě postavy v seznamu dat být zachován a zapsán do okna terminálu. Kopírování a uložení tohoto příkladu „heredoc-2.sh.“ Ať je to spustitelný pomocí
chmod
příkaz. Upravte členité linie, aby se ujistil, že mají jeden nebo dva znaky tabulátoru na začátku řádku, spíše než řada mezer.
#! / Bin / bash
kat & lt; & lt; _end_of_text
Vaše uživatelské jméno je: $ (whoami)
Váš současný pracovní adresář: $ PWD
Váš Bash verze je: $ BASH_VERSION
_end_of_text
./ heredoc-2.sh
Tyto karty jsou zapisovány do okna terminálu.
Přidáním pomlčky „
-
“Provozovateli přesměrování je zde dokument bude ignorovat hlavní postavy kartu. Uložit tento příklad jako „heredoc-3.sh“ a učinit z něj spustitelný.
#! / Bin / bash
kat & lt; & lt; - _end_of_text
Vaše uživatelské jméno je: $ (whoami)
Váš současný pracovní adresář: $ PWD
Váš Bash verze je: $ BASH_VERSION
_end_of_text
./ heredoc-3.sh
Karty jsou ignorovány. To se může zdát triviální, ale je to elegantní způsob, jak se vypořádat s předními záložkami kvůli členité úseky skriptů.
Smyčky a další logické konstrukty jsou obvykle odsazeny. Pokud váš zde je dokument obsažen v členité části skriptu, pomocí pomlčky „
-
“Se odstraní provozovatele přesměrování formátování problémy způsobené předních postav kartě.
#! / Bin / bash pokud je to pravda; pak kat & lt; & lt; - _limit_string Linka 1 s předním kartě. 2. řádek s předním kartě. Linka 3 s předním kartě. _limit_string fi
Přesměrování do souboru
Výstup z příkazu použit s dokumentem zde lze přesměrovat do souboru. Použijte „
& Gt;
“(Vytvořit soubor) nebo„
& Gt; & gt;
“(Vytvořit soubor, pokud neexistuje, přidejte do souboru, pokud to dělá) operátorů přesměrování
po
limitu řetězec v prvním řádku zde dokumentu.
Tento skript je „heredoc-4.sh.“ Bude přesměrovat svůj výstup do textového souboru s názvem „session.txt.“
#! / Bin / bash kat & lt; & lt; _end_of_text & gt; session.txt Vaše uživatelské jméno je: $ (whoami) Váš současný pracovní adresář: $ PWD Váš Bash verze je: $ BASH_VERSION _end_of_text
./ heredoc-4.sh
kočka session.text
Potrubí na výstup k jinému příkazu
Výstup z příkazu použité ve zde dokumentu lze umístit jako vstup do jiného příkazu. Použití
trubka „
|.
“provozovatelem
po
limitu řetězec v prvním řádku zde dokumentu. Jedeme do potrubí výstupu z příkazu zde dokumentu,
kočka
do
sed
. Chceme
nahradit všechny výskyty
písmene "A" s písmenem "E".
Název tohoto skriptu "heredoc-5.sh."
#! / Bin / bash kočka & lt; _end_of_text | sed 's / a / e / g' Jak Na Gaak. _end_of_text
./ Heredoc-5.sh
"Gaak" je opraven na "Geek".
Odesílání parametrů do funkce
Příkaz, který se používá s dokumentem, může být funkce ve skriptu.
Tento skript prochází některá data vozidla do funkce. Funkce přečte data, jako by byla zadána uživatelem. Hodnoty proměnných jsou pak vytištěny. Uložte tento skript jako "heredoc-6.sh".
#! / Bin / bash
Funkce SET_CAR_DETAILS ()
set_car_details ()
{
číst
číst model
Přečtěte si New_used.
Přečtěte si doručování_collect.
Číst umístění
číst cenu
}
# ZDE Dokument, který projde data na set_car_details ()
set_car_details & lt; _mars_rover_data.
NASA.
Vytrvalost Rover.
Použitý
Sbírat
Mars (dlouhá, lat) 77.451865,18.445161
2,2 miliardy
_mars_rover_data.
# Načíst detaily vozidla
echo "Make: $ make"
ECHO "Model: $ Model"
echo "nové nebo použité: $ new_used"
echo "Dodávka nebo sbírka: $ doručení_collect"
ECHO "Umístění: $ Location"
ECHO "cena $: $ Cena"
./ Heredoc-6.sh
Podrobnosti o vozidle jsou zapsány do okna terminálu.
Vytváření a odeslání e-mailu
Můžeme použít dokument zde vytvořit a odeslat e-mail. Všimněte si, že můžeme projít parametry příkazu před operátorem přesměrování. Jsme
pomocí Linuxu
pošta
příkaz
na
Napište e-mail prostřednictvím místního poštovního systému
uživatelského účtu s názvem "Dave". . \ T
-s.
(Předmět) Volba nám umožňuje určit předmět e-mailu.
Tento příklad tvoří skript "heredoc-7.sh."
#! / Bin / bash Článek = "zde dokumenty" Mail -s 'Stav pracovního zatížení' Dave & Lt; _zpráva o projektu Uživatelské jméno: $ (whoami) Dokončil přiřazení: Článek: $ článek _project_report
./ Heredoc-7.sh
Z tohoto skriptu není vidět žádný viditelný výstup. Ale když zkontrolujeme naši poštu, vidíme, že e-mail byl složen, odeslán a dodán.
Použití dokumentů s SSH
Zde dokumenty jsou výkonný a pohodlný způsob, jak provést některé příkazy ve vzdáleném počítači, jakmile bylo vytvořeno připojení SSH. Pokud nastavíte klávesy SSH mezi dvěma počítači, proces přihlášení bude plně automatický. V tomto rychlém a špinavém příkladu budete vyzváni k zadání hesla pro uživatelský účet ve vzdáleném počítači.
Tento skript je "heredoc-8.sh". Připojujeme se ke vzdálenému počítači s názvem "Remote-PC". Uživatelský účet se nazývá "Dave". Používáme
-T.
(Zakažte pseudo-terminální alokaci) možnost, protože nám nepotřebujeme interaktivní pseudo-terminál, který by nám byl přidělen.
V části "Proveďte nějakou práci zde" Skript, mohli bychom předat seznam příkazů a tyto by byly provedeny ve vzdáleném počítači. Samozřejmě, můžete jen zavolat skript, který byl ve vzdáleném počítači. Vzdálený skript by mohl držet všechny příkazy a rutiny, které chcete provést.
Vše, že náš Script-Heredoc-8.SH-bude provede aktualizaci protokolu připojení na vzdáleném počítači. Do textového souboru jsou zaznamenány uživatelský účet a razítko času a data.
#! / Bin / bash ssh -t [email protected] & lt; _remote_commands. # nějakou práci tady # Aktualizovat protokol připojení echo $ user "-" $ (datum) & gt; & gt; /Home/dave/conn_log/script.log. _remote_commands
Když spustíme příkaz, budeme vyzváni k zadání hesla pro účet na adrese dálkový počítač.
./ Heredoc-8.sh
Zobrazí se některé informace o vzdáleném počítači a jsme se vrátili do příkazového řádku.
Na
dálkový
počítač, můžeme použít
kočka
Chcete-li zkontrolovat protokol připojení:
CAT CONN_LOG / SCRIPT.LOG
Každé spojení je pro nás uvedeno.
PŘÍBUZNÝ: Jak vytvořit a nainstalovat klávesy SSH z Shell Linux
Podivné jméno, elegantní funkce
Zde dokumenty jsou nepředvídatelné, ale silné, zejména při posílání příkazů do vzdáleného počítače. Je to jednoduchá záležitost skriptu zálohování rutiny
rsync.
. Skript se pak může připojit ke vzdálenému počítači, zkontrolovat zbývající úložný prostor a odeslat upozornění e-mail, pokud se prostor dostane nízký.
PŘÍBUZNÝ: Jak zálohovat systém Linuxu s rsync