# shellcheck shell=dash

___x_cmd_outerr_pack___sh(){
    (
        (
            ( "$@" )        # Just In case there is exit inside.
            printf "\n%s\n" "$?"
        ) | ___x_cmd_outerr___pack_stdout___sh
    ) 2>&1
}

# TODO: Will consider using awk.
___x_cmd_outerr___pack_stdout___sh(){
    local i=0
    local line=""
    local line_1=""
    local line_2=""
    while read -r line; do
        i=$((i+1))
        if [ "$i" -gt 2 ]; then
            printf "${___X_CMD_OUTERR_MIX_PACK_PREFIX}%s\n" "$line_2"
        fi
        line_2="$line_1"
        line_1="$line"
    done
    return "$line_1"
}

___x_cmd_outerr_unpack___sh(){
    local line=""
    while read -r line; do
        case "$line" in
            "${___X_CMD_OUTERR_MIX_PACK_PREFIX}"*)
                printf "%s\n" "${line#"${___X_CMD_OUTERR_MIX_PACK_PREFIX}"}"
                ;;
            *)
                printf "[stderr] %s\n" "$line" ;;
        esac
    done
}

___x_cmd_outerr_out___sh(){
    local line=""
    while read -r line; do
        case "$line" in
            "${___X_CMD_OUTERR_MIX_PACK_PREFIX}"*)
                printf "%s\n" "${line#"${___X_CMD_OUTERR_MIX_PACK_PREFIX}"}"
                ;;
            *)  ;;
        esac
    done
}

___x_cmd_outerr_err___sh(){
    local line=""
    while read -r line; do
        case "$line" in
            "${___X_CMD_OUTERR_MIX_PACK_PREFIX}"*) ;;
            *)
                printf "%s\n" "$line" ;;
        esac
    done
}

