解決方法

解決方法

私は 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

関連情報