如何告诉SQLITE忽略STDIN?

时间:2016-03-11 05:32:57

标签: sqlite

我正在执行sqlite:

sqlite3 -batch -cmd "select col2 from mytable where col1 = 'myvalue';" mydb

我希望它执行select语句并退出,但它会坐在那里并等待进一步输入,需要.exit命令。

我没有选择执行</dev/null,因为我是以编程方式执行命令而不是从shell脚本执行命令。

如果不使用shell重定向或管道,sqlite3如何在单行命令中退出?

1 个答案:

答案 0 :(得分:1)

SQLite3监视器实用程序将第一个不以-开头的参数视为要打开的数据库的名称。之后的任何其他参数都不是开关或开关参数,它们被视为要执行的命令,就好像它们是从STDIN输入的一样。至少有一个这样的命令的存在禁止从STDIN完全解析。这就是-cmd存在的原因:它让你在开始时执行命令然后仍然进入STDIN REPL。因此,您可以修改命令行:

sqlite3 -batch mydb "select col2 from mytable where col1 = 'myvalue'"

就像通过C API编译预准备语句一样,在查询结束时不需要分号。每个命令行参数都被视为完整语句或sqlite3点命令。