コマンド置換で壊れたbash完了を修正する方法は? [コピー]

コマンド置換で壊れたbash完了を修正する方法は? [コピー]

bash-completion私が破損しているようです。コマンド置換を使用しようとするたびに(たとえば、次のように入力するときなど)

ls $(ls Deskto<Tab>

..出てくる..

ls $(ls Desktobash unexpected eof while looking for matching ")".

.bashrc私のファイルを削除してcp /etc/skel/bashrc ~/新しいファイルを取得しようとしました。新しいbashrcに何かを追加するまでは動作しませんでした。してecho '#" >> ./.bashrcも壊れます。鉱山を削除してもbash_aliases役に立ちませんでした。

sudo apt-get install --reinstall bash-completionそれもしなかった。しかし、同様の問題のいくつかのスレッドがありますが、役に立たない。

どんなアドバイスもありがとうございました! :)

答え1

あなたのものはbash-completion実際に「壊れた」ものではありません。ただ既知のバグbash-completion 2.1 と Bash 4.3 で使用されます。

私は最近答えた関連質問AskUbuntuからそしてまたここしかし、私がここに来たので、この質問をグーグルする人もここで答えを見つけることができるようにここにも答えます。

詳細をお知らせしましたAsk Ubuntuただし、本質的にこの問題を解決するには、次の手順を実行できます。

  1. 変える

    [[ ${!2} == \$* ]] && eval $2=${!2}
    

    そして

    [[ ${!2} == \$\'* ]] && eval $2=${!2}
    

    _quote_readline_by_refファイルの関数で/usr/share/bash-completion/bash_completion(推奨されていません)

  2. 最新のGitバージョンを見るバッシュ完成ライブラリそしてそれを使用してください。このバージョンではバグが修正されたようです。

これらの解決策の1つを使用すると、コマンドの置き換えではタブ補完は再利用されませんが、少なくとも対応するエラーメッセージは再表示されません。

実際には、コマンド置換でタブ補完を実装するには、以前のバージョンのBashに戻す必要があります(効果があると聞いた)またはライブラリが実際にBash 4.3の問題を解決するのを待ちます。

答え2

この問題を引き起こす可能性があるのは、キーワードにエイリアスを割り当てることです。などlocalのエイリアスキーワードを使用しないでください。localdodone

答え3

/etc/bash_completionまず、それがどのように見えるかを見てみましょう。

. /usr/share/bash-completion/bash_completion

(行の先頭を見逃さないでください.)それでも役に立たない場合は、bashファイルからすべてのリンクを見つけようとします。

find / -name *bash* -type f -exec grep -l completion {} \+ 2>/dev/null

そして、エラーがないか確認してください。一部のファイルには次のコードが必要です。

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

関連情報