Как зафиксировать синтаксическую ошибку MySQL в Bash, $? не работает на меня - PullRequest
1 голос
/ 21 февраля 2020

I sh, чтобы найти способ "Bash" для обнаружения ошибки при ошибке SQL. Например, в моем скрипте bash я запускаю ниже SQL с очевидной ошибкой. Я нашел несколько ссылок, предлагающих использовать «$?», Я пытался, но он всегда возвращает 0, так как команды были успешно выполнены. В любом случае я могу зафиксировать ошибку в Bash, когда в операторе SQL есть ошибка? Спасибо !!

sql="SELECTXX FROM DUAL"

result=$(mysql -h ${host} -u ${username} -p${password} --skip-column-names --silent --execute="${sql}")

Результат:
ОШИБКА 1064 (42000) в строке 1: в синтаксисе SQL произошла ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с 'SELECTXX FROM DUAL' в строке 1

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

$(command) фиксирует вывод команды.

То, что вы хотите:

mysql ....
result=$?

$result != 0 указывает и ошибка

0 голосов
/ 21 февраля 2020

Попробуйте добавить >/dev/null 2>&1 в конце вашей команды. Это перенаправит стандартную ошибку на стандартный вывод, а затем вы получите ошибку в результирующей переменной. В противном случае вы получите только стандартный вывод. Как это:

result=$(mysql -h ${host} -u ${username} -p${password} --skip-column-names --silent --execute="${sql}" 2>&1 > /dev/null)

...