#!/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