Если я провожу простой тест кодов выхода напрямую с помощью отдельных команд:
[user@localhost ~]$ date
Tue Sep 8 14:00:11 CEST 2020
[user@localhost ~]$ echo $?
0
[user@localhost ~]$ dat
bash: dat: command not found...
[user@localhost ~]$ echo $?
127
Но если я хочу поместить их в предложение if, я вижу, что для кода выхода 0 результат в порядке, однако для кода команды не найден (он должен быть 127) он возвращает 1.
[user@localhost ~]$ date
Tue Sep 8 14:02:18 CEST 2020
[user@localhost ~]$ if [ $? -eq 0 ]; then echo "Success: $?"; else echo "Failure: $?" >&2; fi
Success: 0
[user@localhost ~]$ dat
bash: dat: command not found...
[user@localhost ~]$ if [ $? -eq 0 ]; then echo "Success: $?"; else echo "Failure: $?" >&2; fi
Failure: 1
Что мне не хватает?
[
также изменяет$?
. Использование:dat; status=$?; if [ $status = 0 ]; then echo "Success: $status"; else echo "Failure: $status"; fi
. - person Jonathan Leffler   schedule 08.09.2020$?
в предложенииelse
- это статус выхода[ $? -eq 0 ]
в предложенииif
. - person M. Nejat Aydin   schedule 08.09.2020set -e
не лучше исполнит то, что вы хотите? - person user1934428   schedule 08.09.2020set -e
и явно разрешить некорректное поведение тем нескольким командам, которые вы хотите исключить. Просто идея ..... - person user1934428   schedule 08.09.2020