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

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

私はしばらくプログラムを終了するためにKill $(pidof)を使用してきました$()

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

タブ補完は、コマンド置換の外側でもうまく機能します。

私の質問は、Ubuntuシステムでタブを完成させるための設定ファイルはどこですか?誰かがこの特定の問題を経験した場合、または私ができないものが何であるかを明確に知っている場合は、この問題を解決する方法および/またはこれが発生するのはなぜですか? (常に理由が気になりました。)そうでない場合は、この問題の調査をどこでどのように始めるべきかを教えてください。

修正する

タブの完成時に$(pidofエラーは発生しなくなりましたが、今はまったく機能しません。私は実際にbashの内部を実際に台無しにしたことはありませんが、手が汚れているのを恐れません。どんな指針でも大変感謝いたします。

答え1

私の質問は、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. 最新のGitバージョンを見るバッシュ完成ライブラリそしてそれを使用してください。このバージョンではバグが修正されたようです。

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

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

関連情報