私は Debian Jessie 8.6 を使用しています。apt-get
パッケージとコマンドで Tab キーを押すと期待どおりに bash の自動補完が実行されることに気付きましたが、それを使用しようとするとapt
機能しません。xubuntu 16.04 を使用したときは機能していたことを覚えているので、ここで機能しないのは奇妙に思います。コマンドでも有効にする方法はありますかapt
? ある場合、どのようにすればよいですか?
答え1
Debian には「bash-completion」がインストールされておらず、有効になっていません。
たとえば、Debian がプリインストールされ、デフォルトで有効になっている Ubuntu から Debian に移行する場合、これが混乱の原因となる可能性があります。
これを有効化/「修正」するには、(root として) 次を実行します:
apt-get install bash-completion
次に、2 つのオプションがあります。次のいずれかを実行します。
1. ユーザーごとに有効にする、または
2. グローバルに有効にします。
1. 自分のユーザーに対してのみ有効にしたい場合は、~/.bashrc
次の行を編集して追加します。
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
ログアウトして再度ログインせずに試すには、次を実行します。
. ~/.bashrc
または、新しいシェルを開きます。次に、apt でタブ補完を使用してみます。先頭のドットとスペース ( .
) は、bash でキーワードを使用するのと同じですsource
が、より移植性があります。
su
ルート アカウントにログインしたときにこれを動作させたい場合は、ルートのホーム ディレクトリ (通常は/root
) で同じことを実行します。
2.グローバルに有効にするには、(1) を代わりにファイルに含めます/etc/bash.bashrc
。
なぜこれが機能するのか疑問に思う人のために、の.
前の部分/etc/bash_completion
はない前後にスペースがあるため、現在のディレクトリを参照します。代わりに、指定されたファイルの内容が新しいサブシェルで実行されるのではなく、現在実行中のシェルで評価されます。ここで標準化されます。
Bash では、これを.
コマンド に置き換えることができますsource
が、これは POSIX で標準化されておらず、移植性が低いため、使用を避けるように勧めています。この場合、これは特に bash を拡張するためのプログラムであり、Bourne Shell や で動作する必要があるものではないためksh
、読みやすさのために自由に に置き換えることができますsource
。
ちなみに、この動作 (サブシェルを開かない) は、DOS/Windows .BAT スクリプトが通常動作し、実行されるシェルの状態を変更する方法に似ています。このため、cd
シェル スクリプトで別のパスに移動すると、.BAT の場合のように、スクリプトが終了したときにそのパスには移動しません。
答え2
Debian 9 Stretch では、/etc/bash.bashrc を編集してコメントを解除するだけです:
# enable bash completion in interactive shells
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
答え3
解決方法
自動補完を試みたところ、自動補完の問題が発生しましたwget
が、以下のフライからパラメータapt-get install wg[TAB][TAB]
を削除することで解決できました。--no-generate
/usr/share/bash-completion/completions/apt-cache
/usr/share/bash-completion/completions/apt-get
これらのファイルは をインストールした後にのみ使用可能であることに注意してくださいbash-completion
。
私が言及しているパラメータ--no-generate
は以下の行にありますが、 --no-generate
この行だけでなく、次の行からも ALL を削除しました。
https://github.com/scop/bash-completion/blob/master/completions/apt-get#L28
どうしてこんなことになってしまったのでしょうか?
set -v
前に を実行した後にこの点に到達しましたapt-get install wg[TAB][TAB]
。実行されたコマンドは次のとおりでした。
apt-cache --no-generate pkgnames wg
出力はエラーでした:
E: Could not open file - open (2: No such file or directory)
apt-cache pkgnames wg
なしで実行すると、--no-generate
自動補完のリストが正しく取得されました。
root@484f5c8f56ba:/# apt-cache pkgnames wg
wgalician-minimos
wget2
wgaelic
wget
wgerman-medical
wget2-dev
お役に立てれば。
答え4
この設定ファイルを Ubuntu: /usr/share/bash-completion/completions/apt から Jessie の同じディレクトリにコピーします。ファイルはここからも取得できます:http://pastebin.com/PRBMt3an