Bash

如何在一個襯裡 shell 命令中將多個命令傳遞給 sqlite3

  • March 29, 2021

我正在嘗試將剪貼板內容保存到 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

我的一個襯裡腳本有什麼問題?

如果您不想要日誌,不確定為什麼要使用 SQLite(如果速度是一個問題,您是否考慮過更快的 WAL 模式?)但是您可以給出多個用分號分隔的命令:

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

derobert的答案似乎不適用於點命令,但您可以使用-cmdsqlite3 tolls.sql3 -cmd ".mode csv" ".import tolls.csv tolls"

它接受多個-cmd命令並在最終 arg 之前按順序執行它們。

引用自:https://unix.stackexchange.com/questions/397806