我无法在互联网上的任何地方找到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 :(得分: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++;
。在检测到另一种类型的错误之后,在代码中较早地使用此递增操作。我会向作者报告。