aboutsummaryrefslogtreecommitdiff
path: root/bin/statusconv
blob: 9bc858b84ad53afa49aee7b6d1ed57ba42060a3c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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