/ / jak zakończyć powłokę, gdy polecenie powłoki podrzędnej nie działa? - linux, bash, shell

jak zakończyć powłokę, gdy polecenie powłoki podrzędnej nie działa? - linux, bash, shell

Jak zakończyć powłokę, gdy polecenie pod-powłoki nie działa.

na przykład:

check(){
if [ $1 -eq $1 2> /dev/null ]; then
echo "returning 0"
return 0
else
echo "returning 1"
return 1
fi
}

if [ "($check $1)" == 1 ]; then
echo "Error: with proper message"
exit
fi

if [ "$1" -le 1000 ] || [ "$2" -ge 10000 ]; then
echo "Error:"
exit
fi

Tutaj przekazuję ciąg znaków i pierwszy warunekkończy się niepowodzeniem, a drugi, jeśli warunek jest wykonywany z błędem w wierszu poleceń "oczekiwane wyrażenie całkowite". Jestem świadomy, że () polecenie powłoki podrzędnej nie działa, ale powłoka się nie kończy. Jak wyjść z powłoki, gdy nie działa polecenie podrzędne.

Odpowiedzi:

1 dla odpowiedzi № 1

Chcesz przetestować status wyjścia funkcji. Następujące:

if [ "($check $1)" == 1 ]; then

prawdopodobnie spowoduje błąd. Nawet jeśli powiedziałeś:

if [ "$(check $1)" == 1 ]; then

to nie porównałoby status wyjścia, tj zwracana wartość funkcji. Zamiast tego porównałby wydajność funkcji z 1.

Musisz wywołać swoją funkcję mówiąc:

check $1

a następnie sprawdź status wyjścia, mówiąc:

if [ $? -ne 0 ]; then
echo "Error: with proper message"
exit
fi

(O ile widzę, nie ma tu żadnej podpowłoki).


0 dla odpowiedzi nr 2
function try() {
echo "$@"
if ! "$@"
then
t="$_"
echo "Failed, error $t"
exit $t
fi
return $_
}

try mkdir /dev/sda # ;-)