2014-10-09 4 views
1

Я не могу найти документацию в любом месте в Интернете для кодов возврата из командной строки sqlite3.sqlite3 командной строки несогласованные коды возврата

Пытаясь использовать его программно, я обнаружил, что некоторые ошибки будут печататься на экране, но все равно возвращать ноль. Например, все, что возвращает сообщение об ошибке «Ошибка: неполном SQL» не вызовет приложение командной строки для возврата ненулевая:

$ echo 'foo' > /tmp/foo.sql 
$ sqlite3 /tmp/foo.db < /tmp/foo.sql 
Error: incomplete SQL: foo 
$ echo $? 
0 

Является ли это ошибка? Я бы так думать, особенно учитывая эту эквивалентную строку:

$ sqlite3 /tmp/foo.db "foo" 
-- Loading resources from /home/yomomma/.sqliterc 

Error: near "foo": syntax error 
$ echo $? 
1 

Может кто-нибудь мне точку в документации на ожидаемых возвращаемых значений для sqlite3?

(проблема не моя .sqliterc, воспроизводится в полном объеме здесь:

.mode column 
.headers on 
.nullvalue '<NULL!>' 

)

Edit:

$ sqlite3 --version 
-- Loading resources from /home/yomomma/.sqliterc 

3.7.13 2012-06-11 02:05:22 f5b5a13f7394dc143aa136f1d4faba6839eaa6dc 
+0

Это все еще происходит в SQLite3 3.8.6. Я также получаю возвращаемое значение 0 с использованием первого примера. – jftuga

ответ

1

Это может быть ошибка в SQLite (v3.8.6). Я смотрю на shell.c: 3644

if(nSql){ 
    if(!_all_whitespace(zSql)){ 
    fprintf(stderr, "Error: incomplete SQL: %s\n", zSql); 
    } 
    free(zSql); 
} 
free(zLine); 
return errCnt>0; 

Я думаю, что должно быть errCnt++; после утверждения fprintf. Эта операция инкремента используется ранее в коде после обнаружения другого типа ошибки. Я сообщу об этом автору.

+0

Я перекомпилировал это заявление. Теперь он возвращает '1' обратно в ОС. – jftuga

+1

Воспроизводится, изолировано и фиксировано в течение 5 минут после публикации! Отлично, спасибо! –

+0

Кроме того, можете ли вы вернуться к отчету об ошибке после его завершения? –

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