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

Talaan ng mga Nilalaman:

Anonim

Kapag nagsusulat ng mga script ng shell ay maaaring nasa isang sitwasyon kung saan kailangan mong magpasa ng isang multiline block ng teksto o code sa isang interactive na utos, tulad ng tee , cat , o sftp .

Sa Bash at iba pang mga shell tulad ng Zsh, ang isang dokumento na Narito (Heredoc) ay isang uri ng pag-redirect na nagbibigay-daan sa iyo upang makapasa ng maraming mga linya ng pag-input sa isang utos.

Ang syntax ng pagsulat ng HereDoc ay tumatagal ng sumusunod na form:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • Ang unang linya ay nagsisimula sa isang opsyonal na utos na sinusundan ng espesyal na redirection operator << at ang delimiting identifier.
    • Maaari mong gamitin ang anumang string bilang isang delimiting identifier, ang pinaka-karaniwang ginagamit ay EOF o END.Kung ang delimiting identifier ay hindi nakuha, ang shell ay kapalit ng lahat ng mga variable, utos at mga espesyal na character bago maipasa ang mga linya ng dokumento na dito sa command.Ang isang minus sign sa redirection operator <<- , ay magiging sanhi ng lahat ng nangungunang mga character na tab na hindi papansinin. Pinapayagan ka nitong gumamit ng indisyon kapag nagsusulat dito-mga dokumento sa mga script ng shell. Hindi pinapayagan ang nangungunang mga character ng whitespace, tab lamang.
    Ang block na narito ng dokumento ay maaaring maglaman ng mga string, variable, utos at anumang iba pang uri ng input.Ang huling linya ay nagtatapos sa delimiting identifier. Hindi pinapayagan ang puting espasyo sa harap ng delimiter.

Mga Pangunahing Hudyat na Heredoc

Sa seksyong ito, titingnan namin ang ilang mga pangunahing halimbawa kung paano gamitin ang heredoc.

Ang Heredoc ay madalas na ginagamit kasama ng utos ng pusa.

Sa sumusunod na halimbawa, ipinapasa namin ang dalawang linya ng teksto na naglalaman ng isang variable ng kapaligiran at isang utos na cat gamit ang isang dokumento dito.

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

Tulad ng nakikita mo mula sa output sa ibaba, pareho ang variable at ang output output ay nahalili:

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

Tingnan natin kung ano ang mangyayari kung isama namin ang delimiter sa solong o dobleng quote.

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

Maaari mong mapansin na kapag ang delimiter ay sinipi walang pagpapalawak ng parameter at pagpapalit ng command ay ginagawa ng shell.

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.

Sa halip na ipakita ang output sa screen maaari mong mai-redirect ito sa isang file gamit ang > , >> operator.

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

Kung ang file.txt ay hindi umiiral ay malilikha ito. Kapag ginagamit ang > file ay mai-overwrite, habang ang >> ay magdagdag ng output sa file.

Ang heredoc input ay maaari ring mai-piped. Sa sumusunod na halimbawa ang sed utos ay papalit sa lahat ng mga pagkakataon ng l character na e :

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

Heeeo Wored

Upang isulat ang piped data sa isang file:

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

Paggamit ng Heredoc kasama ang SSH

Ang paggamit ng Heredoc ay isa sa pinaka-maginhawa at pinakamadaling paraan upang maisagawa ang maraming mga utos sa isang malayuang sistema sa SSH.

Kapag gumagamit ng hindi hinihinging delimiter tiyaking nakatakas ka sa lahat ng mga variable, utos at mga espesyal na character kung hindi man sila ay magkakabukol sa lokal na lugar:

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

Maaaring gusto mo ring mag-set up ng isang pagpapatunay na batay sa SSH key at kumonekta sa iyong Linux server nang hindi pumapasok sa isang password.

Konklusyon

Sa gabay na ito, nalaman mo kung ano ang heredoc at kung paano gamitin ito sa iyong script ng shell.

terminal ng bash