.shell CMD ARGS... Run CMD ARGS... in a system shell
1Like
Go言語でのデータベース操作をUdemyで勉強しているのですが、sqlファイルを実行してターミナルにsqlite>
が表示された状態でgoファイルを実行すると、...>
となり、^C
で強制離脱しないといけなくなります。.exit
でも抜けることができません。
Udemyの動画では、sqlite>
が表示された状態でgoファイルを実行してもsqlite>
のままで、続けてデータベース操作ができています。この動画は数年前に作成されたものですので、今と仕様が違うのだとは思うのですが、いちいち.exit
してからgoファイルを実行するのは億劫です。
良い解決方法がございましたらご教授ください。
また、動画でsqlite3を使用していたため、同じようにsqlite3を使用しているのですが、Go言語に適したSQLがあればそちらもご教授いただけます幸いです。
$ sqlite3 hoge.sql
sqlite3>
# この状態でmain.goを実行すると...
sqlite3> go run カレントディレクトリ/main.go
...>
# 上記のようになり、何か入力しても...>がまた表示されるだけです
# .exitでも抜けられないので、^Cで抜けるしかありません
.shell CMD ARGS... Run CMD ARGS... in a system shell
;
"(セミコロン)が打たれるまで入力状態になるので ...>
と表示され続けます。...> ; ↩️
と打つと、それまでの SQL 文が実行され、エラーが表示されると思います。.shell
" を使う必要があります。$ sqlite3 hoge.sql
sqlite3> .shell go run <カレントディレクトリ>/main.go
SQLite3 には「ドット・コマンド」と呼ばれる、SQLite3 独自のコマンドがあります。
例えば、SQL のクエリ結果をテーブル表示して見やすくするには、.header
コマンドでテーブル名の表示を有効にし、.mode
コマンドでカラム表示を有効にするなどがあります。
$ sqlite3 fuga.sql
sqlite3> .header on
sqlite3> .mode column
sqlite3> select rowid, * from table1;
rowid timestamp description
----- ------------------- -----------------------
1 2022-04-16 14:09:52 First sample data. Foo
2 2022-04-16 14:09:58 Second sample data. Bar
つまり、以下の時点では「hoge.sql
というファイルを SQLite3 で開いて、SQL 文(クエリ)の入力待ちである」という状態です。
$ sqlite3 hoge.sql
sqlite3>
そのため、go run ...(略)
と打っても、SQL クエリの入力をしていると判断され、";
" で終わるまで入力を待つ ... >
が表示されるのだと思います。