Android

Bash heredoc

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

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

Sadržaj:

Anonim

Prilikom pisanja skripti školjki možda ćete naići na situaciju da trebate proslijediti višeslojni blok teksta ili koda interaktivnoj naredbi, kao što su tee , cat ili sftp .

U Bashu i ostalim školjkama poput Zsh-a, dokument Here (Heredoc) je vrsta preusmjeravanja koja vam omogućuje da u naredbu proslijedite više linija unosa.

Sintaksa pisanja HereDoc ima sljedeći oblik:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • Prvi redak započinje neobaveznom naredbom, a slijedi je poseban operator preusmjeravanja << i razlučujući identifikator.
    • Možete koristiti bilo koji niz kao razgraničavajući identifikator, najčešće se koriste EOF ili END.Ako je razgraničavajući identifikator citiran, ljuska će zamijeniti sve varijable, naredbe i posebne znakove prije nego što naredne redove dokumenta ovdje prenese u naredbu. minus minus operatoru preusmjeravanja <<- , uzrokovat će zanemarivanje svih vodećih znakova kartice. To vam omogućuje korištenje uvlačenja pri pisanju ovdje dokumenata u skripti školjki. Vodeći znakovi bijelog prostora nisu dopušteni, samo kartica.
    Blok ovdje-dokumenta može sadržavati žice, varijable, naredbe i bilo koju drugu vrstu unosa. Posljednji redak završava razgraničavajućim identifikatorom. Bijeli prostor ispred razdjelnika nije dopušten.

Osnovni primjeri Heredoca

U ovom ćemo dijelu pogledati neke osnovne primjere kako koristiti heredoc.

Heredoc se najčešće koristi u kombinaciji s mačjom naredbom.

U sljedećem primjeru prenosimo dva retka teksta koji sadrže varijablu okoline i naredbu za cat koristeći dokument ovdje.

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

Kao što možete vidjeti iz rezultata ispod, i varijabla i izlaz naredbe su zamijenjeni:

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

Da vidimo što će se dogoditi ako razdjelnik priložimo u pojedinačne ili dvostruke navodnike.

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

Možete primijetiti da kad je citiran razdjelnik, ljuska ne provodi proširenje parametara i zamjenu naredbi.

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.

Umjesto prikaza rezultata na zaslonu, možete ga preusmjeriti u datoteku pomoću operatora > , >> .

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

Ako file.txt ne postoji, kreirat će se. Kada koristite > datoteka će se prebrisati, a >> će izlaz dodati datoteci.

Ulaz heredoc-a također se može presložiti. U sljedećem primjeru naredba sed zamijenit će sve instance znaka l s e :

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

Heeeo Wored

Da biste napisali pipetove podatke u datoteku:

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

Korištenje Heredoca sa SSH

Upotreba Heredoca jedan je od najpovoljnijih i najlakših načina za izvršavanje više naredbi na udaljenom sustavu preko SSH-a.

Pri korištenju razgraničara bez citata obavezno izbjegavajte sve varijable, naredbe i posebne znakove jer će se u protivnom lokalno interpolirati:

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

Možda ćete također htjeti postaviti SSH ključ provjere autentičnosti i povezati se sa svojim Linux poslužiteljima bez unosa lozinke.

Zaključak

U ovom smo priručniku naučili što je heredoc i kako ga koristiti u svojim skriptama ljuske.

bash terminal