# shellcheck shell=dash

# ( set -o pipefail; ( false ) | ( true ); echo $?; )
# ( false ) | ( true ); echo $?
___x_cmd_outerr_pack___awk(){
    (
        (
            ( "$@" )                # Just In case there is exit inside.
            printf "\n%s\n" "$?"
        ) | ___x_cmd_outerr___pack_stdout___awk
    ) 2>&1
}

# TODO: Will consider using awk.
___x_cmd_outerr___pack_stdout___awk(){
    ___x_cmd_cmds_awk -v prefix="$___X_CMD_OUTERR_MIX_PACK_PREFIX" '
NR>2{
    printf("%s%s\n", prefix, line_2)
}
{
    line_2 = line_1
    line_1 = $0
}
END{
    exit(line_1)
}
'
}

___x_cmd_outerr_unpack___awk(){
    ___x_cmd_cmds_awk -v prefix="$___X_CMD_OUTERR_MIX_PACK_PREFIX" -v pre_len="${#___X_CMD_OUTERR_MIX_PACK_PREFIX}" '
$0~"^"prefix{
    printf("%s\n", substr($0, pre_len+1))
    next
}
{
    printf("[stderr] %s\n", $0)
}
'
}

___x_cmd_outerr_out___awk(){
    ___x_cmd_cmds_awk -v prefix="$___X_CMD_OUTERR_MIX_PACK_PREFIX" '
$0~"^"prefix{
    printf("%s\n", $0)
    next
}
'
}

___x_cmd_outerr_err___awk(){
    ___x_cmd_cmds_awk -v prefix="$___X_CMD_OUTERR_MIX_PACK_PREFIX" '
$0~"^"prefix{ next; }
{
    printf("[stderr] %s\n", $0)
}
'
}

