sqlite3コマンドを実行したら”– Loading resources from ~/.sqliterc”というメッセージが表示され困った話
sqlite3 コマンドを実行したら "-- Loading resources from ~/.sqliterc" というメッセージが表示され困った話
はじめに
最近、なぜだか急に SQLite 周りの話題で盛り上がり始めましたね。
過去にマーケティングの効果測定サービスの設計/開発/運用をしていたときには、ストレージ層(MySQL クラスタ)の冗長化の一環として、SQLite を各 Web サーバに定期的にばらまく、といったキャッシュ機構を導入したいた事がありました。
その時のことを思い出して、懐かしさを感じています。
今回は自分の作業用 PC で sqlite3
コマンドを実行したところ、 -- Loading resources from ~/.sqliterc
というメッセージが出力されました。
こちらのメッセージが邪魔なのでなんとか除外したいなぁと悩んで対処したことをエントリにまとめてみました。
検証環境
問題
とある SQLite データベースファイル test.db
があり、こちらにはテーブル t1
が含まれています。
t1
テーブルデータを全て閲覧したかったので、 sqlite3
コマンドの引数に SQL を指定し実行してみました。
レコードが 2 件挿入されているのがわかったのですが、出力結果の 1 行目のメッセージが気になりました。
/Users/genzouw/.sqliterc
というファイルは以前自分で用意したファイルです。sqlite3
コマンド実行時の挙動を変更するための設定ファイルになります。
設定は 2 行記述してあります。
.header on
で出力結果にヘッダー行が追加されます。.mode column
で出力列の区切り文字がデフォルトの|
から タブ区切りとなります。
-- Loading resources from /Users/genzouw/.sqliterc
という文言があると、 SQL 実行結果をパイプで後続に渡すといったことをしたい場合に面倒が起きそうで、なんとかこれが表示されないようにしようと思いました。
対処法 1 : ~/.sqliterc
を削除 OR 移動
~/.sqliterc
ファイルがあることで不要なメッセージが出力されてしまうので、このファイルを一時的に削除または移動すればメッセージが表示されないようになります。
メッセージは表示されないようになりました。
しかし、出力フォーマットも変わってしまい、また出力後にまた .sqliterc
ファイルをもとに戻す作業が必要になります。
対処法 2 : インタラクティブな操作をやめる( 標準入力を塞ぐ )
SQLite のコードを見てみます。
以下の 2 つの条件を満たした状態で sqlite3
コマンドが起動すると、このメッセージが表示されるようです。
~/.sqliterc
ファイルが存在- インタラクティブな標準入力を保持
先程紹介した 「 ~/.sqliterc
ファイルの削除または移動」は 1 つ目の条件を無効化する対処です。
対処法 2 では、 インタラクティブな標準入力を無効化する対処になります。
以下のいずれかで対処できます。
対処法 3 : SQL を標準入力で渡す
対処法 2 に似ています。SQL を標準入力経由で渡します。
インタラクティブな標準入力を 閉じる という考えでは、対処法 2 と一緒かもしれません。
対処法 4 : 気にしないようにする
いっそ、無視してしまいましょう。
というのも、この -- Loading resources from /Users/genzouw/.sqliterc
というメッセージは標準出力ではなく 標準エラー出力 に出力されているメッセージだからです。
sqlite3
コマンドの実行結果をパイプで次の処理に渡したとしても、 -- Loading resources from /Users/genzouw/.sqliterc
のメッセージはパイプで渡りません。
sqlite3
コマンドの実行結果をリダイレクトでファイルに書き出した場合も同様で、 このメッセージは書き込まれません。
ひとこと
sqlite3
コマンドに対して SQL を指定する際には、標準入力で渡してやるのが素直そうです。
ディスカッション
コメント一覧
まだ、コメントがありません