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 № 1Chcesz 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 # ;-)