Как перехватить вывод ошибки в оболочке, если кода ошибки недостаточно?

Мне попался скрипт с веткой if-else с конкретной командой, получилось или нет, вот так:

      pg_ctl -D /var/lib/pgsql/data -w promote
if [ $? -ne 0 ]; then
   echo: failure
   exit 1
else
   echo: succeed
   exit 0
fi

Он смотрит прямо вперед. Но если сервер postgresql, который он хотел продвигать, уже работает как основной, он также выдаст код ошибки = 1 и сообщение об ошибке, содержащее «не находится в режиме ожидания». Так что ничего страшного, если эта ошибка возникает, но код ошибки = 1 или$? -ne 0дает ложноположительный результат. Я хочу просто принять эту конкретную ошибку как еще один успешный результат, и как я могу ее достичь?

1 ответ

Не существует прямой переменной bash, например$?однако, чтобы уловить точное сообщение об ошибке, можно сохранить результат в текстовом файле для анализа. В данном случае сценарий такой:

      pg_ctl -D /var/lib/pgsql/data -w promote &> promote_return
if [ $? -ne 0 ]; then
   if [ `grep -c 'is not in standby mode' promote_return` -ne 0 ]; then
     echo okay: no need to promote twice.
     exit 0
   else 
     echo failure: please check the file promote_return for error message.
     exit 1
   fi
else
   echo succeed
   exit 0
fi
Другие вопросы по тегам