Вы должны быть осторожны.Первая операция на $?
обычно очищает ее, так что ваш if
все равно не будет работать.
Вам было бы лучше использовать:
rc=$?
echo $rc
if [ $rc -ne 0 ]
:
Кроме этого, ону меня отлично работает:
$ grep 1 /dev/null
$ if [ $? -ne 0 ]
> then
> echo xx
> fi
xx
$ grep 1 /dev/null
$ echo $?;
1
$ if [ $? -ne 0 ]
> then
> echo yy
> fi
$ _
Обратите внимание на отсутствие вывода в последнем.Это потому, что echo
всасывает возвращаемое значение и перезаписывает его (так как эхо было успешным).
В качестве отступления, вы должны сообщить нам, какой UNIX икакой кш вы на самом деле используете.Моя рабочая версия - Ksh93 под Ubuntu.Ваш пробег может отличаться, если вы используете меньшую версию.
Похоже, из вашего обновления ваша единственная проблема сейчас - это вызов функции.Это, скорее всего, потому что вы определяете его после его использования.Сценарий:
grep 1 /dev/null
rc=$?
if [ $rc -ne 0 ]
then
failed $rc
fi
failed()
{
echo Return code was $1
}
производит:
qq.ksh[6]: failed: not found
, а:
failed()
{
echo Return code was $1
}
grep 1 /dev/null
rc=$?
if [ $rc -ne 0 ]
then
failed $rc
fi
производит
Return code was 1