2014-10-09 23 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!>' 

編輯:

$ 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 2014-10-09 19:09:07

回答

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; 

我覺得應該有一個fprintf中陳述後errCnt++;。在檢測到其他類型的錯誤之後,在代碼中使用此增量操作。我會把這個報告給作者。

+0

我用這個語句重新編譯。現在它將'1'返回到操作系統。 – jftuga 2014-10-09 19:19:05

+1

轉載,隔離並在發佈後不到5分鐘!非常好,謝謝! – 2014-10-09 19:28:44

+0

另外,一旦它發佈,你能連接到錯誤報告嗎? – 2014-10-09 19:35:42