diff options
-rwxr-xr-x | bin/statusconv | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/bin/statusconv b/bin/statusconv new file mode 100755 index 0000000..9bc858b --- /dev/null +++ b/bin/statusconv @@ -0,0 +1,50 @@ +#!/bin/sh +set -eu + + +FROM_N='' +TO_N='' +for flag in "$@"; do + case "$flag" in + *[0-9]:*[0-9]) + X="$(printf '%s' "$flag" | cut -d ':' -f1)" + Y="$(printf '%s' "$flag" | cut -d ':' -f2)" + FROM_N="$FROM_N $X" + TO_N="$TO_N $Y" + shift + ;; + *) + break + ;; + esac +done + + +if [ "$1" = '--' ]; then + shift +fi + +STATUS=0 +"$@" || STATUS=$? + +FOUND=false +I=-1 +for from in $FROM_N; do + I=$((I + 1)) + if [ "$from" = "$STATUS" ]; then + FOUND=true + break + fi +done + +if [ "$FOUND" = false ]; then + exit "$STATUS" +fi + +J=-1 +for to in $TO_N; do + J=$((J + 1)) + if [ "$J" = "$I" ]; then + exit "$to" + fi +done |