如何在一个 shell 命令中将多个命令传递给 sqlite3

如何在一个 shell 命令中将多个命令传递给 sqlite3

我正在尝试将剪贴板内容保存到 sqlite 数据库中。创建了数据库和表。

我不希望它journal在每次剪贴板更改中创建文件,所以我尝试传递PRAGMA journal_mode = OFF;标志。但是在单行命令中传递这些命令很棘手,因为sqlite只接受两个命令,例如

sqlite3 clipboard_archive.db "insert into cb (cb_context) values ('clipboard');"

有用。我寻找了Q&A一些网站,一些建议按以下方式回显命令。

echo "PRAGMA journal_mode = OFF;" | sqlite3 clipboard_archive.db "insert into cb (cb_context) values ('clipboard');"

PRAGMA journal_mode = OFF;尽管它在命令提示符下工作,但不会以这种方式生效sqlite3

我的单行脚本出了什么问题?

答案1

德罗伯特的答案似乎不适用于点命令,但您可以使用-cmdsqlite3 tolls.sql3 -cmd ".mode csv" ".import tolls.csv tolls"

它接受多个-cmd命令并在最终参数之前按顺序执行它们。

答案2

如果您不需要日志,不确定为什么要使用 SQLite(如果考虑速度,您是否考虑过更快的 WAL 模式?),但您可以给出用分号分隔的多个命令:

sqlite3 clipboard_archive.db "PRAGMA journal_mode = OFF; insert into cb (cb_context) values ('clipboard');"

答案3

你可以跑……

$ sqlite3 <database_file> '<statement_1>' ['<statement_n>']

例子…

$ sqlite3 data.db '.mode json' 'select * from my_table'

答案4

看来这个-cmd开关不仅可以使用一次。这也适用于我(Windows 上的 SQLite 3.8.7.2):

sqlite3.exe yourdb.db -cmd ".mode column" -cmd ".headers on" "select * from persons;"

相关内容