Почему не "эхо $?" вывести код выхода команды прямо перед ней, пока она используется в "&&"?
Предположим, у меня есть эта простая программа на C, которая возвращает 4 в оболочку.
int main()
{
return 4;
}
Когда я запускаю его, тогда делаю echo $?
, Я бы получил 4
, что ожидается
$ gcc foo.c && ./a.out
$ echo $?
4 <<<< expected
НО, когда я делаю следующее, я ничего не получаю
$ gcc foo.c && ./a.out && echo $?
$ <<<< Nothing - WHY????
1 ответ
&&
второй аргумент запускается только в том случае, если первый аргумент был успешным, т. е. если он завершился с кодом выхода 0. Код выхода 4 означает "сбой" для оболочки, поэтому echo
не выполняется. Пытаться
gcc foo.c && ./a.out || echo $?
Если вы хотите увидеть код выхода только тогда, когда он не равен нулю. Если вы хотите видеть это всегда, используйте
gcc foo.c && ./a.out ; echo $?
Обратите внимание, что он может сообщить код выхода gcc
если это не ноль.