1つのシェルコマンドでsqlite3に複数のコマンドを渡す方法

1つのシェルコマンドでsqlite3に複数のコマンドを渡す方法

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

クリップボードが変更されるたびにファイルを作成したくないので、フラグを渡してjournalみました。PRAGMA journal_mode = OFF;しかし、これらのコマンドを1行のコマンドとして渡すのは難しいです。なぜなら、sqlite2つのコマンドだけが許可されるからです。

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;"

関連情報