Android

Bach eredoc

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

Cuprins:

Anonim

Când scrieți scripturi de tip shell pot fi într-o situație în care trebuie să treceți un bloc multiliniu de text sau cod la o comandă interactivă, cum ar fi tee , cat sau sftp .

În Bash și alte shell-uri precum Zsh, un document Here (Heredoc) este un tip de redirecție care vă permite să treceți mai multe linii de intrare la o comandă.

Sintaxa scrierii HereDoc are următoarea formă:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • Prima linie începe cu o comandă opțională urmată de operatorul special de redirecționare << și identificatorul de delimitare.
    • Puteți folosi orice șir ca identificator de delimitare, cele mai utilizate sunt EOF sau END. Dacă identificatorul delimitant nu este cotat, shell-ul va înlocui toate variabilele, comenzile și caracterele speciale înainte de a trece liniile de document aici la comandă. minus semnul către operatorul de redirecționare <<- , va face ca toate caracterele file principale să fie ignorate. Acest lucru vă permite să utilizați indentare atunci când scrieți documente aici în scripturi shell. Caracterele de spațiu alb nu sunt permise, doar fila.
    Blocul de document aici poate conține șiruri, variabile, comenzi și orice alt tip de intrare. Ultima linie se încheie cu identificatorul de delimitare. Spațiul alb din fața delimitorului nu este permis.

Exemple de bază Heredoc

În această secțiune, vom analiza câteva exemple de bază despre utilizarea eredocului.

Heredoc este cel mai adesea utilizat în combinație cu comanda pisicii.

În exemplul următor, trecem două linii de text care conțin o variabilă de mediu și o comandă pentru cat folosind un document aici.

cat << EOF The current working directory is: $PWD You are logged in as: $(whoami) EOF

După cum puteți vedea din ieșirea de mai jos, atât variabila cât și ieșirea comenzii sunt înlocuite:

The current working directory is: /home/linuxize You are logged in as: linuxize

Să vedem ce se va întâmpla dacă încercuim delimitatorul cu ghilimele simple sau duble.

cat <<- "EOF" The current working directory is: $PWD You are logged in as: $(whoami) EOF

Puteți observa că atunci când este cotat delimitatorul, nici o extindere a parametrilor nu este înlocuită de comandă.

The current working directory is: $PWD You are logged in as: $(whoami)

if true; then cat <<- EOF Line with a leading tab. EOF fi

Line with a leading tab.

În loc să afișați ieșirea pe ecran, o puteți redirecționa către un fișier utilizând operatorii > , >> .

cat << EOF > file.txt The current working directory is: $PWD You are logged in as: $(whoami) EOF

Dacă file.txt nu există, va fi creat. Când utilizați > fișierul va fi suprascris, în timp ce >> va adăuga ieșirea la fișier.

Introducerea eredală poate fi, de asemenea, conductă. În următorul exemplu, comanda sed va înlocui toate instanțele caracterului l cu e :

cat <<'EOF' | sed 's/l/e/g' Hello World EOF

Heeeo Wored

Pentru a scrie datele conectate într-un fișier:

cat <<'EOF' | sed 's/l/e/g' > file.txt Hello World EOF

Utilizarea Heredoc cu SSH

Utilizarea Heredoc este una dintre cele mai convenabile și mai simple modalități de a executa mai multe comenzi pe un sistem de la distanță prin SSH.

Când utilizați un delimiter fără cot, asigurați-vă că veți scăpa de toate variabilele, comenzile și caracterele speciale, altfel vor fi interpolate local:

ssh -T [email protected] << EOF echo "The current local working directory is: $PWD" echo "The current remote working directory is: \$PWD" EOF

The current local working directory is: /home/linuxize The current remote working directory is: /home/user

De asemenea, poate doriți să configurați o autentificare bazată pe cheie SSH și să vă conectați la serverele Linux fără a introduce o parolă.

Concluzie

În acest ghid, ați învățat ce este heredoc și cum să îl utilizați în scripturile dvs. shell.

terminalul bash