どうやって解決しましたか?

どうやって解決しましたか?

私はDebian Jessie 8.6を使用しています。apt-getパッケージとコマンドタブをクリックすると、予想されるbashオートコンプリートが表示されますが、一緒に使用しようとすると機能しないaptことがわかりました。私はxubuntu 16.04を使っていたことを思い出して動作しましたが、ここではうまくいかないのは奇妙だと思います。aptコマンドにも有効にする方法はありますか?それでは、どうすればいいですか?

答え1

Debian には「bash-completion」がインストールされ、アクティブになっていません。

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ではこれを.commandに置き換えることができますが、sourcePOSIX標準化ではなく移植性が落ちるため、人々が離れる傾向があります。この場合、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

関連情報