Как перехватить вывод ошибки в оболочке, если кода ошибки недостаточно?
Мне попался скрипт с веткой 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