過去1〜2年間、私はWeb開発プロジェクトにsqlite3を頻繁に使用しました。私はいつも突然コマンド履歴が機能しなくなるという問題を見つけました。 (上矢印を押すと、bashと同様にコマンド履歴が表示されます。)
参考までに
Ubuntu 22.04.3 LTS(6.5.0-21-generic)と.NET Core 8.0.200を実行しています。
私が試したこと
私はこれを理解できません。
- ファイルを確認して
~/.sqlite_history
みると正常に見えます。 - env変数を確認しましたが、
$SQLITE_HISTORY
これはなく、まだ動作します(詳細は以下を参照)。 - sqlite3 最新バージョンにアップデート (3.45.1 2024-01-30)
- これに関連する多くの質問を調査しましたが、歴史が突然機能しない理由はまだわかりません。
編集 - コンソールアプリケーションを試しましたが、問題が発生しました。
- 新しい端末を開く
- sqlite3 データベースを開き、履歴コマンドをテストします。動作します。
- sqlite3を終了してコマンドライン(同じ端末)に戻ります。
- コンソールに「Hello、World」を印刷して終了する.NET Coreコンソールアプリケーションを実行します。 (dotnet run で始まる)
- ステップ2と同じsqlite3データベースを開きます。歴史を試してみてください。この端末ウィンドウでは、履歴は無効になります。
ついに問題の原因を見つけました
最後に、sqlite3の記録が機能しない理由を見つけました。
しかし、これがなぜ問題を引き起こすのか理解できません。
問題を再現するには、次の手順を実行する必要があります。
- dotnetコアWebアプリケーションの起動例:(
$ dotnet run --project myWebApi
) - webapi 停止(CTRL-C)
- 私のデータベースを確認するためにsqlite3を起動しました。現時点では記録はありません。 (矢印を上に押すと結果はありません。)
問題に関する手がかり
新しい端末を開き、sqlite3を実行すると、履歴が再び表示されます。
dotnetのコアアプリケーションが私のように実行されていますが、そこで奇妙なことが起こっているとは思いませんが、よくわかりません。
なぜこれが起こるのか知っていますか?
答え1
端末にはいくつかの矢印キーシーケンスセットがあります。通常、Upシーケンスを入力しますがESC [ A
、同じキーを入力する「Apply Key」モードがありますESC O A
。
何らかの理由で、Wineとdotnetは両方とも、「コンソール」抽象化レイヤーの予期しない部分でこのモードを有効にしてから終了時に無効にすることを忘れてしまう傾向があります。
(通常、このモードは(非)有効にする必要がありtput smkx
ますtput rmkx
。)
私が正しく覚えている場合、後者のキーシーケンスは「アプリケーションモードで上向き矢印」ではありません。 「Ctrl-Arrow Up」または同様のシーケンスを使用する他の端末があります。だから何らかの理由で、読書船Bashや他のさまざまなプログラム(sqliteを含む)によって使用される入力ライブラリは、このシーケンスを一般的な「記録の上矢印/前のページ」とは異なる操作にバインドします。