![Cum se configurează serverul „Squid Proxy” pe Ubuntu și Debian](/f/cc460eed63e330fbf4def029c1440864.png?width=100&height=100)
Aici document (Heredoc) este un literal sau un flux de fișiere care este tratat ca un bloc special de cod. Acest bloc de cod va fi transmis unei comenzi pentru procesare. Heredoc provine din UNIX scoici și pot fi găsite în shell-uri Linux populare cum ar fi sh, tcsh, ksh, bash, zsh, csh. În special, alte limbaje de programare precum Perl, Ruby, PHP acceptă și Heredoc.
Heredoc folosește 2 paranteze unghiulare (< urmat de un jeton delimitator. Același jeton delimitator va fi utilizat pentru a termina blocul de cod. Orice intră în delimitator este considerat a fi un bloc de cod.
Uită-te la exemplul de mai jos. Redirecționez blocul de cod către comandă pisică. Aici delimitatorul este setat la „BLOC”Și terminat de același„BLOC“.
pisica << BLOC Bună ziua lumii Astăzi data este $ (data +% F) Directorul meu de acasă = $ {HOME} BLOC
NOTĂ: Ar trebui să utilizați același jeton delimitator pentru a porni blocul și a termina blocul.
Dacă codificați cândva în bash acum, este posibil să știți că bash nu acceptă în mod implicit comentarii cu mai multe linii, cum ar fi
C sau Java. Poți să folosești AiciDoc pentru a depăși acest lucru.Aceasta nu este o caracteristică integrată a bash-ului care acceptă comentariile pe mai multe linii, ci doar un hack. Dacă nu redirecționați heredoc la orice comandă, interpretul va citi pur și simplu blocul de cod și nu va executa nimic.
<< COMETARIU Aceasta este linia de comentarii 1 Aceasta este linia de comentarii 2 Aceasta este linia de comentarii 3. COMETARIU
În mod implicit, heredoc nu va suprima niciun caracter de spațiu alb (file, spații). Putem suprascrie acest comportament adăugând liniuță (-)
după (< urmat de un delimitator. Acest lucru va suprima toate spațiile filelor, dar spațiile albe nu vor fi suprimate.
pisica << - BLOC. Această linie nu are spațiu alb. Această linie are 2 spații albe la început. Această linie are o singură filă. Această linie are 2 file. Această linie are 3 file. BLOC.
Heredoc acceptă substituția variabilă. Variabilele pot fi variabile definite de utilizator sau variabile de mediu.
ASTĂZI = $ (data +% F) pisică << BLOC1. # Variabile definite de utilizator. Data de astăzi este = $ {TODAY} #Variabile de mediu. Alerg ca = $ {USER} Dir. Acasă este = $ {HOME} Folosesc $ {SHELL} ca shell. BLOC 1.
În mod similar, puteți rula orice comenzi în interiorul heredoc bloc de cod.
pisică << BLOC2. $ (uname -a) BLOCK2.
Există mai multe moduri în care putem scăpa de personaje speciale. O puteți face la nivel de personaj sau la nivel de doc.
Pentru a scăpa de caractere speciale individuale folosiți un bară inversă (\).
pisica << BLOC4. $ (uname -a) BLOCK4 pisica << BLOCK5. Data de astăzi este = $ {TODAY} BLOC 5.
Pentru a scăpa de toate caracterele speciale din interiorul blocului, înconjurați delimitatorul cu ghilimele simple, ghilimele duble sau delimitatorul de prefix cu o bară inversă.
pisică << 'BLOCK1' Alerg ca = $ {USER} BLOCK1 pisică << "BLOCK2" Alerg ca = $ {USER} BLOCK2 cat << \ BLOCK3. Alerg ca = $ {USER} BLOC 3.
Acum că cunoaștem structura heredoc și cum funcționează, să vedem câteva exemple. Două zone comune în care folosesc heredoc sunt rularea unui bloc de comenzi prin SSH și trecerea interogărilor SQL prin heredoc.
În exemplul de mai jos, încercăm să executăm un bloc de cod pe un server la distanță prin SSH.
În exemplul de mai jos trec un Selectați declarație către psql pentru a vă conecta la o bază de date și a rula interogarea. Acesta este un mod alternativ de a rula o interogare psql în interiorul scriptului bash în loc să utilizați -f
steag pentru a alerga .sql fişier.
#! / usr / bin / env bash UNAME = postgres. DBNAME = testarea psql - nume de utilizator = $ {UNAME} --password --dbname = $ {DBNAME} << BLOCK. SELECTAȚI * DIN ȚĂRI. UNDE region_id = 4; BLOC.
Gata pentru acest articol. Puteți face mult mai multe heredoc comparativ cu ceea ce am arătat în exemple. Dacă aveți orice hack util cu heredoc vă rugăm să îl postați în secțiunea de comentarii, astfel încât cititorii noștri să poată beneficia de asta.