状況
- 以下のように
sqlite3 が複数の場所にインストールされている
$PATH の設定上、/home/foobar/android/sdk/platform-tools/sqlite3 が優先されて使われる
$ which sqlite3
/home/foobar/android/sdk/platform-tools/sqlite3
# sudo apt install によってインストールした sqlite3
$ ls -la /usr/bin/sqlite3
.rwxr-xr-x root root 320 KB Sun Mar 31 17:24:45 2024 /usr/bin/sqlite3
$ /home/foobar/android/sdk/platform-tools/sqlite3 --version
3.44.3 2024-03-24 21:15:01 d68fb8b5dbb8305e00d2dd14d8fe6b3d9f67e2459102ff160d956a6b75ddc18e (64-bit)
$ /usr/bin/sqlite3 --version
3.45.1 2024-01-30 16:01:20 e876e51a0ed5c5b3126f52e532044363a014bc594cfefa87ffb5b82257ccalt1 (64-bit)
この状況だと具体的にどういう挙動となるか
sudo apt upgrade を行っても sqlite3 のバージョンが上がっていかない(=バージョンが上がった sqlite3 が使われない)
- SQLite3 の対話モードに入った際に、特殊なキー(カーソルキーなど)を押すと制御文字がテキスト文字として入力されてしまう
- たとえば、左矢印キーを押すと
^[[D と入力され、カーソルが左に移動しない
gyazo.com
どうしたか(対処方法)
/home/foobar/android/sdk/platform-tools/sqlite3 をリネームしてコマンドを見つけられなくした*1
上記対処方法の問題点
- Android SDK をアップデートしたときに
sqlite3 が上書き更新されてしまう
- Android SDK にて
sqlite3 を使うときに問題が出るのではないか*2
結論
- リネームにより一時的に解決したが、恒久的な解決方法はこれを書いている時点では定まっていない
sqlite3 以外のコマンドについては Android SDK 内のファイル*3 を優先的に使いたいので、$PATH の順序を変えたくはない