web-dev-qa-db-ja.com

ワンライナーシェルコマンドでsqlite3に複数のコマンドを渡す方法

クリップボードのコンテンツをsqliteデータベースに保存しようとしています。作成されたデータベースとテーブル。

クリップボードを変更するたびにjournalファイルを作成したくないので、PRAGMA journal_mode = OFF;フラグを渡そうとしました。しかし、sqliteは次のような2つのコマンドしか受け入れないため、これらのコマンドを1つのライナーコマンドで渡すのは難しいです

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コマンドプロンプト内で機能しますが、その方法では有効になりません。

ワンライナースクリプトの何が問題になっていますか?

2
kenn

ジャーナルが必要ない場合にSQLiteを使用する理由はわかりません(速度が問題になる場合は、はるかに高速なWALモードを検討しましたか?)セミコロンで区切って複数のコマンドを指定できます。

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

derobert の回答はドットコマンドでは機能しないようですが、-cmdを使用できます:sqlite3 tolls.sql3 -cmd ".mode csv" ".import tolls.csv tolls"

複数の-csvコマンドを受け入れ、最後の引数の前にそれらを順番に実行します。

3
jcomeau_ictx