ターミナルでタブ補完が効かない時

Banana Pi M1 Classic に OpenMediaVault を導入すると、root 権限が付与されます。
一般ユーザを作成すると、タブ補完が効かないことに気が付きました。

普段使い慣れている操作ができないとストレスが溜まるので、一般ユーザでもタブ補完ができる方法を調べてみました。

目次

bash-completion パッケージ

最初は bash-completion パッケージの未導入を疑ったのですが、導入済みでした。

$ dpkg -l | grep completion
ii  bash-completion                               1:2.1-4.2ubuntu1.1                           all          programmable completion for the bash shell

なお、bash-completion は、bash シェル用の補完機能を提供するパッケージです。

base on Debian -- sid の bash-completion パッケージに関する詳細

bash completion は bash の標準的な補完処理をたった数ストロークで複雑なコマンドラインを実現できるように拡張します。

設定確認

bash-completion パッケージは導入済みなので、設定を確認します。

ホームディレクトリの確認

  • 確認方法1
    チルダは Home を表します。
$ ls -a ~ 
.  ..  .bash_logout  .bashrc  .profile
  • 確認方法2
    オプション無しの cd は Home へ移動します。
$ cd
$ pwd
/root
$ ls
.  ..  .bash_logout  .bashrc  .profile
ファイル 概要
.bash_logout ログインシェル終了後に読み込まれる。
.bashrc 【ユーザごとのシェル環境設定ファイル】ログインシェル起動・ログイン後にプロセスとしてシェル起動のどちらでも読み込まれる。
.profile 【ユーザごとのシェル環境設定ファイル】.bash_profile が無く、.bash_login が無い場合に読み込まれる。

なお、「アクセスできません: そのようなファイルやディレクトリはありません」とメッセージが表示される場合は、Home (ホームディレクトリ)が存在しません。

設定ファイル確認

通常は下記ファイルに書き込まれています。

  • .bashrc (or /etc/bashrc)
  • .profile (or /etc/profile, ~/.bash_profile)

OMV では、 .bashrc ファイルに記述がありました。
コメントアウトされているので、設定自体は有効になっていることを確認できます。

$ tail ~/.bashrc
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

操作形式の変更

set コマンドは、シェル関数に設定を行うことが可能です。
-o オプションで操作形式を変更できます。

現在の方式確認

vi が off になっています。

$ set -o
allexport       off
braceexpand     on
emacs           off
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       off
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off
xtrace          off

vi を有効にする

vi を on にします。

$ set -o vi

設定確認

vi が有効になっていることが確認できます。

$ set -o
allexport       off
braceexpand     on
emacs           off
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       off
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              on
xtrace          off

確認

タブキーで補完ができるようになっていることを確認します。