代码之家  ›  专栏  ›  技术社区  ›  ceprio

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

  •  0
  • ceprio  · 技术社区  · 7 年前

    我正在尝试将DebianBash脚本转换为Linuxbusybox 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,在本例中)设置为包含多行的字符串,其中包含来自其他变量的值?

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

    echo "RESULTS: $MESSAGE" >> $LOGFILE
    sendmail -S smtp.server.com -f "$FROM" "$RECIPIENTS" <<EOF
    subject:$SUBJECT
    from:$FROM
    
    $MESSAGE
    EOF
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   jhnc    7 年前

    最简单的答案是不要使用read。

    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')" \
    )
    
    
        2
  •  0
  •   chepner    7 年前

    在任何shell中都不需要特殊的命令;只需要常规的分配。

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