使用 busybox sh 将多行输出捕获到 Bash 变量中

Capturing multiple line output into a Bash variable with busybox sh

我正在尝试将 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

问题出在 Busybox 不可用的 read 的 -d 选项。如何将变量(在本例中为 $MESSAGE)设置为包含其他变量值的多行字符串?

输出 MESSAGE 进入日志文件和 sendmail 发送的消息中:

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

$MESSAGE
EOF

最简单的答案是不使用读取。

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')" \
)

您不需要任何特殊命令shell;只是一个常规作业。

message="Return code: $retn_code
Start of backup: $DATESTART
End of backup: $DATEEND
$(df -h | grep '/share/USB')
"