Захват многострочного вывода в переменную Bash с busybox sh - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь преобразовать сценарий Debian Bash в сценарий linux Busybox sh.Я застрял, пытаясь преобразовать следующую команду:

read -r -d '' MESSAGE << EOM
Return code: $retn_code
Start of backup: $DATESTART
End of backup: $DATEEND
$(df -h | grep '/share/USB')
EOM

Проблема с опцией -d read, которая недоступна в Busybox.Как я могу установить переменную (в данном случае $ MESSAGE) в строку с несколькими строками, которая содержит значения из других переменных?

Вывод MESSAGE происходит в файле журнала и в сообщении, отправленном sendmail:

echo "RESULTS: $MESSAGE" >> $LOGFILE
sendmail -S smtp.server.com -f "$FROM" "$RECIPIENTS" <<EOF
subject:$SUBJECT
from:$FROM

$MESSAGE
EOF

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вам не нужна специальная команда в любой оболочке;просто обычное задание.

message="Return code: $retn_code
Start of backup: $DATESTART
End of backup: $DATEEND
$(df -h | grep '/share/USB')
"
0 голосов
/ 10 февраля 2019

Самый простой ответ не использовать чтение.

MESSAGE=$(cat <<EOM
Return code: $retn_code
Start of backup: $DATESTART
End of backup: $DATEEND
$(df -h | grep '/share/USB')
EOM
)
MESSAGE=$( printf "%s\n%s\n%s\n%s\n" \
    "Return code: $retn_code" \
    "Start of backup: $DATESTART" \
    "End of backup: $DATEEND" \
    "$(df -h | grep '/share/USB')" \
)

...