Named ciudat „aici documente“ vă permit să utilizați de intrare / ieșire de redirecționare în interiorul scripturi bash pe Linux. Acestea reprezintă o modalitate foarte bună de a automatiza comenzile de care aveți nevoie pentru a rula pe un computer la distanță.
aici Documente
Multe comenzi în Linux au două sau trei litere nume. Acest lucru este parțial ceea ce dă naștere la ideea că Linux este greu de a învăța și plin de comenzi arcane. Dar unul dintre cele mai ciudate nume din Linux nu este una dintre cele criptic scurte. „Aici documente“ nu sunt documente, și nu este clar cu adevărat ceea ce „aici“ se referă la, fie.
Ele sunt un construct relativ obscur, dar ele sunt utile. Desigur, acest lucru este Linux, deci există mai mult de un mod de a pielii o pisica. Unele dintre funcționalitatea oferită de aici documente pot fi reproduse în alte moduri. Aceste metode alternative sunt de obicei mai complicate. În programare și de scripting, „mai complicat“, de asemenea, înseamnă „mai predispuse la bug-uri,“ și că codul este mai greu de întreținut.
În cazul în care într-adevăr aici documente Excel este în automatizarea comenzilor pe care doriți să trimiteți la un computer la distanță de la o conexiune stabilită din cadrul unui script. Efectuarea conexiunii este ușor, dar odată ce conexiunea a fost făcută, cum „pompă“ comenzile din script-ul dvs. în coajă de pe computerul la distanță? Aici documente vă permit să faci asta foarte simplu.
Principiile de bază de aici Documente
Reprezentarea idiomatice unui aici arata document ca acesta:
COMMAND & lt; & lt; limit_string . . text date variabile . . limit_string
-
COMANDA
: Acest lucru poate fi orice comanda de Linux care acceptă intrarea Redirecționată. Rețineți că este
ecoucomanda nu acceptă intrare Redirecționată . Dacă aveți nevoie pentru a scrie pe ecran, aveți posibilitatea să utilizațipisicăcomanda, care face . - & Lt; & lt; : Operatorul de redirectionare.
- limit_string : Aceasta este o etichetă. Acesta poate fi orice doriți, atâta timp cât nu apare în lista de date vă redirecționați în comanda. Este folosit pentru a marca sfârșitul textului, datele și lista de variabile.
- Listă de date : O listă de date care urmează să fie alimentat la comanda. Acesta poate conține comenzi, text și variabile. Conținutul listei de date sunt introduse în linia de o singură comandă la un moment dat, până când se înregistrează _limit_string.
Vei vedea, probabil, exemple de aici documente care utilizează „EOF“ ca șirul limită. Nu favorizăm această abordare. Acesta funcționează, dar „EOF“ înseamnă „sfârșitul de fișier.“ În afară de cazurile rare în care un document de origine este ultimul lucru într-un fișier script, „EOF“ este utilizat în mod eronat.
Acesta va face scripturile mult mai ușor de citit dacă folosiți un șir de caractere limită, care se referă la ceea ce faci. Dacă trimiteți o serie de comenzi la un computer la distanță de peste
Secure Shell
(SSH), un șir de caractere limită numit ceva de genul „_remote_commands“ ar face sens perfect. Nu aveți nevoie să le înceapă cu o subliniere „
_
" caracter. Facem acest lucru, deoarece le semne ca ceva ieșit din comun în scenariu.
Exemple simple
Puteți utiliza aici documente de pe linia de comandă și în script-uri. Când tastați următoarele într-o fereastră terminal, veți vedea un „
& Gt;
“Linie de continuare solicita de fiecare dată când apăsați«Enter». Când tastați „_end_of_text“ șir limită și a lovit „Enter“, lista de site-uri este trecut la
pisică,
și acestea sunt afișate în fereastra terminalului.
pisică & lt; & lt; _end_of_text Cum-Pentru Geek Revizuirea Geek. LifeSavvy CloudSavvy IT MindBounce _end_of_text
Nu e cel mai util de exerciții, dar nu demonstrează că nimic nu este trimis la comanda până când întreaga listă de date este colaționate și șirul limită este întâlnită. În
pisică
comandă nu primește nici o intrare până când introduceți limita șirul „_end_of_text“ și să apăsați tasta „Enter“.
Putem face același lucru într-un script. Tastați sau copiați acest exemplu într-un editor, salvați fișierul ca „heredoc-1.sh“, și închide editorul.
#! / Bin / bash CAT & LT; "_End_of_text" Numele dvs. de utilizator este: $ (whoami) Directorul curent de lucru este: $ PWD Versiunea ta Bash este: $ BASH_VERSION _end_of_text
Pe măsură ce urmați acest articol, de fiecare dată când creați un script, va trebui să aveți nevoie
face executabil
înainte de a rula. In fiecare caz,
folosește
chmod
comanda
. Înlocuiți numele scriptului în fiecare exemplu pentru numele scriptului utilizat aici.
chmod + x heredoc-1.sh
Acest script conține două variabile de mediu,
$ Pwd.
și
$ Bash_version
. Numele variabilelor de mediu sunt înlocuite cu valorile datelor - directorul de lucru curent și versiunea de bash - când scenariul este executat.
Scriptul utilizează, de asemenea
Substituția comenzii
pe
în
cine sunt
comanda
. Numele comenzii este înlocuit de propria ieșire. Ieșirea din întregul script este scrisă în fereastra terminalului de către comanda CAT. Rulăm scriptul numindu-l după nume:
./ heredoc-1.sh
Dacă modificați scriptul și împachetați șirul limită în prima linie a documentului de aici în ghilimele "
"
", Lista de date este transmisă comenzii de document AICI Verbatim. Numele variabilelor sunt afișate în loc de valori variabile, iar înlocuirea comenzii nu va avea loc.
#! / Bin / bash CAT & LT; - "_end_of_text" Numele dvs. de utilizator este: $ (cineami) Directorul actual de lucru este: $ pwd Versiunea dvs. de bash este: $ bash_version _end_of_text
Manipularea caracterelor Tab
În mod implicit, caracterele Tab din lista dvs. de date vor fi reținute și scrise în fereastra Terminalului. Copiați și salvați acest exemplu ca "heredoc-2.sh". Faceți executabilul folosind
chmod
comanda. Editați liniile indentate pentru a vă asigura că au una sau două caractere la începutul liniei, mai degrabă decât o serie de spații.
#! / Bin / bash
CAT & LT; _end_of_text.
Numele dvs. de utilizator este: $ (cineami)
Directorul actual de lucru este: $ pwd
Versiunea dvs. de bash este: $ bash_version
_end_of_text
./ heredoc-2.sh
Taburile sunt scrise în fereastra terminalului.
Prin adăugarea unei linii "
-
"Pentru operatorul de redirecționare, documentul de aici va ignora caracterele de filme de conducere. Salvați acest exemplu ca "heredoc-3" și faceți executabil.
#! / Bin / bash
cat & lt; și lt; - _end_of_text
Numele dvs. de utilizator este: $ (cineami)
Directorul actual de lucru este: $ pwd
Versiunea dvs. de bash este: $ bash_version
_end_of_text
./ heredoc-3.sh
Filele sunt ignorate. Acest lucru ar putea părea trivial, dar este un mod curat de a face față filelor de conducere datorită secțiunilor indentate de scripturi.
Buclele și alte construcții logice sunt de obicei indentate. Dacă documentul dvs. aici este conținut într-o secțiune indentată a unui script, folosind o linie "
-
"Cu operatorul de redirecționare elimină problemele de formatare cauzate de cele mai importante caractere.
#! / Bin / bash daca e adevarat; atunci cat & lt; - _limit_string Linia 1 cu o filă de lider. Linia 2 cu o filă de lider. Linia 3 cu o filă de lider. _limit_string. FI
Redirecționarea unui fișier
Ieșirea din comanda utilizată cu documentul de aici poate fi redirecționată într-un fișier. Folosește "
& gt;
"(Creați fișierul) sau"
& gt; & gt;
"(Creați fișierul dacă nu există, adăugați la dosar dacă acesta) Operatori de redirecționare
după
șirul de limită în prima linie a documentului de aici.
Acest script este "heredoc-4.sh". Acesta va redirecționa ieșirea la un fișier text numit "sesiune.txt".
#! / Bin / bash CAT & LT; _end_of_text & gt; sesiune.ttt. Numele dvs. de utilizator este: $ (whoami) Directorul curent de lucru este: $ PWD Versiunea ta Bash este: $ BASH_VERSION _end_of_text
./ heredoc-4.sh
pisică session.text
Conducte de ieșire la o altă comandă
Ieșirea din comanda utilizată într-un document aici pot fi conduse ca intrare la o altă comandă. Utilizare
Conducta "
|
“operator de
după
șirul limită în prima linie a documentului aici. Vom țeavă de ieșire de la comanda aici documentul,
pisică
, în
sed.
. Vrem să
înlocui toate aparițiile
a literei "A" cu litera "E".
Denumiți acest script "heredoc-5.sh."
#! / Bin / bash CAT & LT; _end_of_text | SED 'S / A / E / G' Cum La Gaak. _end_of_text
./ heredoc-5.sh
"GAAK" este corectată cu "geek".
Trimiterea parametrilor unei funcții
Comanda utilizată cu un document aici poate fi o funcție în script.
Acest script trece printr-o funcție de date într-o funcție. Funcția citește datele ca și cum ar fi fost introduse de un utilizator. Valorile variabilelor sunt apoi tipărite. Salvați acest script ca "heredoc-6.sh".
#! / Bin / bash
# funcția set_car_detals ()
set_car_detalines ()
{
citiți-l
citiți modelul
Citiți New_used.
citiți livrare_collect.
Citiți locația
Citiți prețul
}
# Documentul aici care trece datele la set_car_detalils ()
set_car_detalils & lt; _MARS_ROVER_DATA.
NASA.
Perseverență Rover.
Folosit
Colectarea
Marte (lung, lat) 77.451865,18.445161
2,2 miliarde de euro
_MARS_ROVER_DATA.
# Preluați detaliile vehiculului
Echo "Faceți: $ face"
Echo "Model: $ model"
Echo "Nou sau folosit: $ New_used"
ECHO "Livrare sau colectare: $ livrare_collect"
Echo "Locație: $ Locație"
Echo "preț \ $: $ preț"
./ heredoc-6.sh
Detaliile vehiculului sunt scrise în fereastra terminalului.
Crearea și trimiterea unui e-mail
Putem folosi un document aici pentru a compune și trimite un e-mail. Rețineți că putem trece parametrii comenzii în fața operatorului de redirecționare. Suntem
folosind linux.
Poștă
comanda
la
Trimiteți un e-mail prin sistemul local de corespondență
la contul de utilizator numit "Dave". În
-S.
(Subiect) Opțiunea ne permite să specificăm subiectul pentru e-mail.
Acest exemplu formează scriptul "heredoc-7.sh."
#! / Bin / bash Articol = "Aici documente" Starea de încărcare a Mail -s "Dave & Lt; _raportul proiectului Nume utilizator: $ (cineami) A încheiat atribuirea: Articol: $ articol _project_report
./ heredoc-7.sh
Nu există o ieșire vizibilă din acest script. Dar când ne verificăm poșta, vedem că e-mailul a fost compus, expediat și livrat.
Folosind aici documente cu SSH
Aici documentele reprezintă o modalitate puternică și convenabilă de a executa unele comenzi pe un computer la distanță odată ce a fost stabilită o conexiune SSH. Dacă ați configurat cheile SSH între cele două computere, procesul de conectare va fi complet automat. În acest exemplu rapid și murdar, vi se va solicita parola pentru contul de utilizator de pe computerul la distanță.
Acest script este "heredoc-8.sh". Vom conecta la un computer la distanță numit "Remote-PC". Contul de utilizator este numit "Dave". Folosim.
-T.
(Dezactivați opțiunea de alocare pseudo-terminală) deoarece nu avem nevoie de un pseudo-terminal interactiv care să ne atribuie.
În secțiunea "Faceți unele lucrări aici" ale scenariului, am putea trece o listă de comenzi, iar acestea vor fi executate pe computerul la distanță. Desigur, ați putea numi un script pe computerul la distanță. Scriptul la distanță ar putea ține toate comenzile și rutinele pe care doriți să le executați.
Tot ceea ce este de gând să faceți script-heredoc-8.Sh - este de a actualiza un jurnal de conectare pe computerul la distanță. Contul de utilizator și ștampila de timp și data sunt înregistrate într-un fișier text.
#! / Bin / bash ssh -t [email protected] & lt; _remote_commands. # Faceți niște lucruri aici # Actualizați jurnalul de conectare ECHO $ Utilizator "-" $ (data) & gt; /Home/dave/conn_log/script.log. _remote_command
Când conducem comanda, suntem solicitați parola pentru contul pe la distanta calculator.
./ heredoc-8.sh
Unele informații despre computerul la distanță sunt afișate și suntem returnați la promptul de comandă.
Pe
la distanta
Computer, putem folosi
pisică
Pentru a verifica jurnalul de conectare:
cat conn_log / script.log
Fiecare conexiune este listată pentru noi.
LEGATE DE: Cum se creează și instalează cheile SSH din carcasa Linux
Numele ciudat, caracteristicile îngrijite
Aici documentele sunt ciudate, dar puternice, mai ales atunci când sunt utilizate pentru a trimite comenzi la un computer la distanță. Ar fi o chestiune simplă pentru a scripta o rutină de rezervă folosind
RSYNC.
. Scriptul se poate conecta apoi la computerul la distanță, verificați spațiul de stocare rămas și trimiteți un e-mail de alertare dacă spațiul a fost scăzut.
LEGATE DE: Cum de a crea copii de siguranță ale sistemului dvs. Linux cu RSYNC