web-dev-qa-db-ja.com

コマンド置換内でBashタブ補完が失敗する

しばらくの間、kill $(pidof)を使用してプログラムを終了してきましたが、昨夜から、$()内でタブ補完を使用しようとすると、エラーがスローされます。

bash: unexpected EOF while looking for matching `)'
bash: syntax error: unexpected end of file

タブ補完は、コマンド置換以外では正常に機能します。

私の質問は、Ubuntuシステムのタブ補完用の構成ファイルはどこにあるのでしょうか?誰かがこの特定の問題を抱えている場合、または私ができないこと、これを修正する方法、および/またはこれが発生する理由をはっきりと見ることができる場合はどうなりますか? (私はいつも理由を知りたいです。)そしてそうでなければ、どこでどのようにこの問題の調査を始めるべきかでさえ、大いに感謝されます。

[〜#〜] update [〜#〜]

$(pidofに続くタブ補完はエラーをスローしなくなりましたが、まったく機能しなくなりました。私はこれまでbashの内部を実際にいじったことはありませんが、手を汚すことを恐れていません。どんなガイダンスでも大歓迎です。

3
blanket_cat

私の質問は、Ubuntuシステムのタブ補完用の構成ファイルはどこにあるのでしょうか?

Ubuntuでは、bash-completionライブラリは/usr/share/bash-completion/bash_completionにあります。

シェルを起動すると、このライブラリはさまざまな方法で取得できます。

  • ~/.bashrc-> /etc/bash_completion-> /usr/share/bash-completion/bash_completion

  • /etc/profile-> /etc/profile.d/bash_completion.sh-> /usr/share/bash-completion/bash_completion

誰かがこの特定の問題を抱えている場合、または私ができないことをはっきりと見ることができる場合、これを修正する方法、および/またはこれが発生する理由は? (私はいつも理由を知りたいです。)

私は最近AskUbuntuで 関連する質問 に答えました(そしてその過程であなたの質問を見つけました)ので、詳細を探してください、しかし一言で言えば、 これは既知のバグです

これを修正するには、次のいずれかを実行できます。

  1. 交換

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

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

    関数_quote_readline_by_ref内のファイル/usr/share/bash-completion/bash_completion(非推奨);または

  2. bash-completionライブラリ の最新のGitバージョンをチェックしてそれを使用してください-バグはこのバージョンで修正されているようです。

これらのソリューションのいずれかでコマンド置換内のタブ補完が再び機能することはありませんが、少なくとも、そのエラーメッセージは表示されなくなります。

コマンド置換内でタブ補完を実際に機能させるには、以前のBashバージョン( 機能していると聞いたところ )に戻すか、ライブラリがBash4.3でその問題を本当に修正するのを待つ必要があります。 。

2
Malte Skoruppa