aptコマンドを使用したときの入力補完機能の動作

Linux Mintを使用している時に特定のコマンドで入力補完機能が動かないことがあるので調べてみました。

入力補完機能の確認

入力補完機能のパッケージbash-completionがインストールされていることを確認します。

$ apt list | grep -i bash-comp
 bash-completion/bionic,bionic,now 1:2.8-1ubuntu1 all [インストール済み]

入力補完機能の動作を確認します。

$ sudo apt install ./[TAB][TAB]
[TAB][TAB]を押しても、aptコマンドではファイル名が補完されません。

lsコマンドでは入力補完機能の動作は問題ありませんが、aptコマンドだと入力補完機能が正しく動作しません。

Linux Mintのaptコマンド

Linux Mintaptコマンドは、/usr/bin/aptラッパーとして動作しているようです。

aptコマンドのパスを確認します。

$ which apt
/usr/local/bin/apt

Debian/Ubuntuのaptコマンドのパスは/usr/bin/aptになります。

aptコマンドの内容を確認するとpythonスクリプトであることが確認できます。

$ more `which apt`
#!/usr/bin/python3

import sys
import os
import subprocess
import shlex

def usage():
(省略)

スクリプトの内容からLinux Mintaptコマンドは引数によって/usr/bin/aptapt-getなどのコマンドを実行していることがわかります。

aptコマンドの入力補完機能の動作不具合

調べてみるとLinix Mintに以前から存在する不具合のようです。

/etc/bash_completion.d/apt-linux-mintaptコマンドの入力補完機能が定義されていますが、ここでの定義がうまくないようです。

根本的な解決策ではないですが、入力補完機能のaptコマンドの定義を上書きすることで解決できます。

$ source /usr/share/bash-completion/completions/apt

~/.bashrcに上記を追加することで、起動時に回避できるようにすることもできます。