4

Фон

В этой публикации было опубликовано следующее решение:

function cmakerel {
    if expr match "$PWD" '*bld*' >/dev/null ; then
        cmake -D....
    else
        echo "Wrong directory!"
    fi
}

cmakerel будет вызывать команду cmake если PWD имеет bld в его названии.

Тем не менее, я обычно вызываю эту команду как: cmakerel && make check

Вопрос

Как мне изменить приведенный выше код, чтобы он возвращал значение при сбое, чтобы вторая часть, make check , не вызывалась?

Вероятно, возвращение некоторого ненулевого значения должно работать.

1 ответ1

5

добавлять

return $?

ниже вызова cmake чтобы выйти из функции с тем же кодом завершения , что и cmake , и добавить

return 1

ниже echo вызова для выхода с 1 , который не равен нулю и, следовательно, указывает на ошибку.


Вы также можете (если вы вызываете обе команды в комбинации) добавить вызов make к этой функции:

 cmake [args] && make -j4

Или, например, для более детальной обработки ошибок:

cmake [args]
local _ret=$?
if [ $_ret -ne 0 ] ; then
   echo "cmake returned with exit code $_ret, aborting!" >&2
   return $_ret
fi
make -j4

Если вы вызываете ее как отдельную программу, то есть сохраняете функцию в сценарии оболочки и вызываете, например, как

/path/to/cmakerel.sh

тогда вы можете использовать exit вместо return чтобы прервать всю программу / подоболочку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .