Dette spørgsmål har allerede svar her :
Kommentarer
Svar
<<
er heredoc. Alt, der følger <<
fungerer som afgrænser for heredoc
cat <<EOF This is first line So, this is 2nd Again, another line EOF
Enter
Så hvis du vil gemme de tre linjer til en variabel, skal du gøre det som nedenfor:
fra kommandolinjen
$ var="$(cat <<EOF > Bingo > Gotcha > Enough > EOF > )"
Indtast
$ echo "$var" #double quotes are important Bingo Gotcha Enough
indefra scriptet
#!/bin/bash var="$(cat <<EOF Bingo Gotcha Enough EOF )" echo "$var"
Kommentarer
- så jeg kan gøre DU_RESULTS_HOME = " $ (kat < < EOF sudo -u hdfs hadoop fs -du -s / user / * | sort -r -k 1 -g | awk ' {suffiks = " KMGT "; for (i = 0; $ 1 > 1024 & & i < længde (suffiks); i ++) $ 1 / = 1024; udskriv int ($ 1) substr (suffiks, i, 1), $ 3; } ' | head -n 22 | awk ' {print $ 1 " \ t \ t \ t " $ 2} ') sudo -u hdfs hadoop fs -df -h / bruger EOF) "
-
<<
er beregnet til strenge som jeg ' har vist, ikke kommandoer. Vil du udføre høje kommandoer og gemme resultaterne tilDU_RESULTS_HOME
? - nej, så i mit script bruger jeg så mange variabler, så jeg prøver for at lære katten < < eof teknik til at reducere antallet af variabler .. og sandsynligvis undgå at bruge udskriftsformat, som er 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 "
"
efterThanks
, for at afslutte strengen.<< EOF
ting kaldes et " her dokument ". Se her , her og her . Jeg ' er ikke sikker på, hvad du spørger om disse to dusin linjer med shell-script, så jeg kan ' t kommentere det.