사용 방법: cat << EOF [중복]

사용 방법: cat << EOF [중복]

나는 약간 혼란스럽고 내 스크립트에 cat << EOF 스타일을 추가하는 방법을 잘 모르겠습니다. 피드백과 도움을 주시면 정말 감사하겠습니다.

이건 내 스크립트야

!/bin/sh
#This is a disk mailer script for hdfs    
DU_RESULTS_HOME=$(sudo -u hdfs hadoop fs -du -s /user/* | sort -r -k 1 -g | awk '{ suffix="KMGT"; for(i=0; $1>1024 && i < length(suffix); i++) $1/=1024; print int($1) substr(suffix, i, 1), $3; }'| head -n 22 |awk '{ print $1"\t\t\t" $2 }')

DF_RESULTS_HOME=$(sudo -u hdfs hadoop fs -df -h /user)
HOSTNAME=$(hostname -s)

MESSAGE_SUBJECT="Disk usage"
MESSAGE_SENDER="xyz"
MESSAGE_EMAIL="abc"

DU_RESULTS_HEADER_USER="Dir size             User"

MESSAGE_BODY="Team:

High level Disk Usage Report for: /user

Please take a moment to clean out any old data, and write temp files to an appropriate filesystem, such as /tmp.

Thanks

if [[ --debug == "$1" ]]; then
    echo debug on 
    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"
else                 
    echo debug off

    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"                        
fi

답변1

이것이 <<정리이다. 뒤에 오는 모든 내용은 <<구분 기호의 구분 기호 역할을 합니다.

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

Enter

따라서 세 개의 행을 변수에 저장하려면 다음과 같이 하십시오.

명령줄에서

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

Enter

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

스크립트 내에서

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

관련 정보