やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3ドットコマンド(.once)

 次のSQL文結果を次のいずれかへ渡す。(テキストエディタ表計算アプリ、ファイル、シェルコマンド)

成果物

.help

.once (-e|-x|FILE)       Output for the next SQL command only to FILE

.once

引数 意味
-e テキストエディタで開く
-x 表計算アプリで開く(出力結果はカンマ区切り)
FILE 一時ファイルでなく指定ファイルに出力する

-e

 CLIコマンドだと空表示されてしまった。一時ファイルがコマンド終了とともに削除されたためと思われる。

sqlite3 :memory: \
".once -e" \
"select 1, 'AAA' union select 2, 'BBB';"

 対話モードだと出力結果がテキストエディタで表示された。デフォルト値に設定されたGUIテキストエディタ。私の環境ではpluma。おそらくラズパイの標準ならleafpad

sqlite3
.once -e
select 1, 'AAA' union select 2, 'BBB';
1|AAA
2|BBB

-x

 CLIだとエラー。

sqlite3 :memory: \
".once -x" \
"select 1, 'AAA' union select 2, 'BBB';"

 私の環境ではLibreOffice Calcが起動した。デフォルトの表計算アプリが起動すると思われる。

 だが、以下のエラーダイアログが出た。一時ファイルがコマンド終了とともに削除されたためと思われる。

/tmp/work/temp409ead5493eb301c.csv はありません。

 対話モード。

sqlite3
.once -x
select 1, 'AAA' union select 2, 'BBB';

 以下のデータでLibreOffice Calcが起動した。

1,AAA
2,BBB

FILE

sqlite3 :memory: \
".once a.csv" \
"select 1, 'AAA' union select 2, 'BBB';" \
".shell cat a.csv"

 おや、何も出ない。




 SQLite3コマンド後にcatコマンドで見ると出た。書込中だったのかな?

cat a.csv
1|AAA
2|BBB

 どうやらファイル名を与えると一時ファイルでなく永続するらしい。

パイプコマンド

 ファイルの最初の文字が|なら、残りの文字はシェルコマンドになる。

CLIコマンド

sqlite3 :memory: \
".separator '|' '\\\n' " \
".once '| xargs -I@ zenity --info --text \"`printf \"@\"`\"  '" \
"select 1, 'AAA' union select 2, 'BBB';"

 以下のダイアログが表示された。

1|AAA
2|BBB

対話モード

 CLIと同じ。

sqlite3
.separator '|' '\\\n'
.once '| xargs -I@ zenity --info --text "`printf \"@\"`"  '
select 1, 'AAA' union select 2, 'BBB';

 以下のダイアログが表示された。

1|AAA
2|BBB

-e,-xFILEは併用できない

sqlite3 :memory: \
".once -e a.txt" \
"select 1, 'AAA' union select 2, 'BBB';"
Usage: .once [-e|-x|FILE]
sqlite3 :memory: \
".once -x a.csv" \
"select 1, 'AAA' union select 2, 'BBB';"
Usage: .once [-e|-x|FILE]

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで