2015-12-05 3 views
1

Я работаю над сценарием bash, чтобы выгрузить базу данных в файл, который будет загружен через FTP. Он будет запущен с помощью задания cron, а сервер sql не является localhost.mysql возвращает 0, когда должен возвращать 1 в скрипте BASH

У меня работает скрипт, но я бегу в дорожный блок с проверкой ошибок. Если скрипт не может подключиться к серверу sql (в маловероятном случае, когда он опускается), я хочу, чтобы он остановился и выдал все, что было в журнале ошибок. Выход в журнал ошибок работает нормально, но сценарий все еще работает и создает пустой файл. Я пытаюсь использовать $? чтобы проверить, не сработало ли соединение mysql, и даже когда я использую сервер тестирования, который выключен, возвращается 0 вместо 1. Я ношу отверстие в стене, из которого я бил головой, что я делаю неправильно?

Если это было задано раньше, пожалуйста, указывайте мне в правильном направлении, но я не мог найти ответы, когда я искал.

содержимое сценария Баш:

{ 
mysql -h $HOST -u $USERNAME -p$PASSWORD < dump.sql | sed "s/\t/\",\"/g;s/^/\"/;s/$/\"/" > test.csv 
} 2>error.log 
if [ $? -ne 0 ]; then { echo "SQL Server connection failed. Aborting" ; exit 1; } fi 
+2

«$?» Записывает возвращаемое значение из sed, я думаю, а не mysql, посмотрите здесь: http://stackoverflow.com/questions/1221833/bash-pipe-output-and-capture-exit-status –

+0

или вы можете выполнить mysql ... < dump.sql > test.csv 2> err; mySqlStat = $? ; sed '....' test.csv'. Удачи. – shellter

ответ

1

$? в этом случае возвращается результат вашей SED команды, а не команды MySQL. Поскольку команда sed всегда преуспевает (вы передаете действительный ввод для нее и действительный набор замещений), вы всегда будете получать 0 в $?.

При использовании одной или нескольких команд с конвейерами в сценарии bash вы хотите использовать встроенную переменную PIPESTATUS, которая позволит вам изучить возвращаемое значение каждой команды в серии команд с каналами, независимо от того, сколько вы трубу вместе.

+0

Это исправлено. Просто хочу также указать (для других .. «специальные« такие люди, как я). PIPESTATUS может не работать, если вы используете «sh

Смежные вопросы