Come si usa: cat < < EOF [duplicate]

Questa domanda ha già una risposta qui :

Commenti

  • Allo stato attuale, lo script necessita di una citazione " dopo Thanks, per terminare la stringa.
  • Grazie steve per il feedback, sì, ho perso le virgolette. Puoi guidarmi un po sullaggiunta di cat < < EOF al mio script?
  • Il << EOF oggetto è chiamato " here document ". Vedi qui , qui e qui . ' non sono sicuro di quello che stai chiedendo su quelle due dozzine di righe di script di shell, quindi posso ' commentarlo.
  • Se ' indirizzi le persone a riferimenti, indirizzali a questo .

Risposta

<< è heredoc. Tutto ciò che segue << funge da delimitatore per heredoc

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

Invio

Quindi, se desideri memorizzare le tre righe in una variabile, fai come di seguito:

dalla riga di comando

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

Invio

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

dallinterno dello script

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

Commenti

  • così posso fare DU_RESULTS_HOME = " $ (cat < < EOF sudo -u hdfs hadoop fs -du -s / user / * | sort -r -k 1 -g | awk ' {suffix = " KMGT "; for (i = 0; $ 1 > 1024 & & i < lunghezza (suffisso); i ++) $ 1 / = 1024; print int ($ 1) substr (suffisso, i, 1), $ 3; } ' | head -n 22 | awk ' {print $ 1 " \ t \ t \ t " $ 2} ') sudo -u hdfs hadoop fs -df -h / user EOF) "
  • << è inteso per stringhe come ho ' dimostrato, non per i comandi. Vuoi eseguire tutti i comandi e memorizzare i risultati in DU_RESULTS_HOME?
  • no, quindi nel mio script sto usando così tante variabili, quindi sto provando per imparare la tecnica cat < < eof per ridurre il numero di variabili .. e probabilmente evitare di utilizzare il formato di stampa, che è 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 "

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *