ssh等でログインすると、ログインシェルである bash がいろいろな補完関数を自動で読み込みます。
Ctrl-iでコマンドラインのいろいろなファイル名、ディレクトリ名などを補完してくれる便利なものなのですが、そんなにたくさんあっても煩わしいので読み込まないようにします。
下記の3か所を修正してみます(3つ目の/etc/skel/.bashrcはadduserコマンドでユーザーを追加する際にコピーされるデフォルト環境、必要に応じてどうぞ)。
- /etc/profile.d/bash_completion.sh (/etc/profileから読み込まれる)
- $HOME/.bashrc (ユーザーごとのスクリプト)
- /etc/skel/.bashrc (ユーザー追加時のデフォルト環境)
/etc/profile.d/bash_completion.sh †
ログインしてbashが起動すると /etc/profile が最初に読み込まれ、さらにその中から上記の bash_completion.sh 読み込まれ補完関数が展開されます。
下記の設定により bash_completion.sh を読み込まないようにします。
/etc/profile 本体を修正すると変更量が多くなるので、読み込まれる側のスクリプトのパーミッションを変更して読み込まれないようにします。
$ su
# chmod 000 /etc/profile.d/bash_completion.sh
$HOME/.bashrc †
ログインユーザーのホームディレクトリにあるスクリプトです。
デフォルトでは /etc/bash_completion を読み込んで補完関数を定義しています。
.bashrc の最後のほうにある下記の3行をコメントアウトして、補完関数を読み込まないようにします。
$ diff .bashrc.orig .bashrc
< if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
< . /etc/bash_completion
< fi
---
> #if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
> # . /etc/bash_completion
> #fi
/etc/skel/.bashrc †
adduserコマンドでユーザー追加時に使用されるデフォルト環境のスクリプトです。
変更方法は、先ほどの $HOME/.bashrc と同様です。
ここは必要に応じて実施するのがよいでしょう。
備考 †
- Raspberry Piのようにあまり高性能でない*1マシンでは、上記設定変更を行うことで、ログイン時の反応が若干ではあるが早くなるような気がする。
- bashの補完関数の読み込みは、最終的に
/usr/share/bash-completion/bash_completion
というスクリプトの読み込みになるのだが、/etc/profileと.bashrcで二重に読み込もうとしているように見える。おそらく二重読み込みにならないようなチェックが入っていると思われるが、そこまでは追っかけていない。気になる人は調べてみるのも面白いかも。