Hoe gebruik ik: cat < < EOF [duplicate]

Deze vraag heeft hier al antwoorden :

Opmerkingen

  • Zoals het er nu uitziet, heeft het script een aanhalingsteken " nodig na Thanks, om de string te beëindigen.
  • Bedankt Steve voor de feedback, ja ik heb de aanhalingstekens gemist. Kun je me alsjeblieft een beetje vertellen over kat < < EOF-toevoeging aan mijn script?
  • De << EOF thingy wordt een " hier document " genoemd. Zie hier , hier en hier . Ik ' weet niet zeker wat je vraagt over die twee dozijn regels shellscript, dus ik kan ' daar geen commentaar op geven.
  • Als je ' mensen naar referenties wilt verwijzen, verwijs ze dan naar deze .

Antwoord

De << is de heredoc. Alles wat volgt op << fungeert als scheidingsteken voor de heredoc

cat <<EOF This is first line So, this is 2nd Again, another line EOF 

Enter

Dus als je de drie regels in een variabele wilt opslaan, doe het dan zoals hieronder:

vanaf de opdrachtregel

$ var="$(cat <<EOF > Bingo > Gotcha > Enough > EOF > )" 

Voer

$ echo "$var" #double quotes are important Bingo Gotcha Enough 

vanuit het script

#!/bin/bash var="$(cat <<EOF Bingo Gotcha Enough EOF )" echo "$var" 

Reacties

  • zodat ik kan doen DU_RESULTS_HOME = " $ (cat < < EOF sudo -u hdfs hadoop fs -du -s / user / * | sort -r -k 1 -g | awk ' {suffix = " KMGT "; voor (i = 0; $ 1 > 1024 & & i < lengte (achtervoegsel); i ++) $ 1 / = 1024; print int ($ 1) substr (achtervoegsel, i, 1), $ 3; } ' | head -n 22 | awk ' {print $ 1 " \ t \ t \ t " $ 2} ') sudo -u hdfs hadoop fs -df -h / user EOF) "
  • << is bedoeld voor strings zoals ik ' heb gedemonstreerd, niet voor opdrachten. Wil je lange commandos uitvoeren en de resultaten opslaan in DU_RESULTS_HOME?
  • nee, dus in mijn script gebruik ik zoveel variabelen, dus ik probeer om de kat < < eof techniek te leren om het aantal variabelen te verminderen .. en vermijd waarschijnlijk het gebruik van het afdrukformaat, dat is printf '% s \ n \ n \ n \ n% s \ n \ n% s \ n% s \ n \ n \ n \ n \ n% s \ n% s \ n % s ' " $ MESSAGE_BODY " " $ DF_RESULTS_HOME " " $ DU_RESULTS_HEADER_USER " " $ DU_RESULTS_HOME " | / bin / mail -s " $ MESSAGE_SUBJECT " -r " $ MESSAGE_SENDER " " $ MESSAGE_EMAIL "

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *