Bashが完了すると構文エラーが発生します。

Bashが完了すると構文エラーが発生します。

質問:

現在私がいるディレクトリにある「build」というディレクトリに変更しようとしているとしましょう。私は始める:

cd b

次に、Tabキーを1回押します(現在のディレクトリに文字で始まる他のディレクトリがないことを知っていますb)。必要に応じて、戻る、変更、または改善する準備ができていることを確認したいと思います。

cd build

しかし、Linux Peppermint 3を実行しているネットブックでタブボタンを押すと、次のことが起こります。

cd bbash: command substitution: line 74: syntax error near unexpected token `done'
bash: command substitution: line 74: `            done'

私が試したこと:

  • 「bash-completion」パッケージを再インストールしてみましたが、目立つ効果はありませんでした。

  • ファイル、特に74行を見ましたが、/etc/bash_completion明らかに修正する必要がある部分()が見つかりませんでしたcomplete -f -X '*.Z' compress znew。たぶん私は間違ったファイルを探しているかもしれません。

  • 、などのコマンドの完成機能が正しく機能しているgitことがわかりました。ただし、ファイル名を自動補完しようとしても機能しません。geditnodekate

  • デバッグを実行すると、bash -x多くのコードが端末に印刷されます。これが最後の部分です(コメントを参照)。

    + toks=(${toks[@]-} $(
        compgen -d -- "$quoted" | {
            while read -r tmp; do
                # TODO: I have removed a "[ -n $tmp ] &&" before 'printf ..',
                #       and everything works again. If this bug suddenly
                #       appears again (i.e. "cd /b<TAB>" becomes "cd /"),
                #       remember to check for other similar conditionals (here
                #       and _filedir_xspec()). --David
                printf '%s\n' $tmp
            done
        }
    ))
    bash: command substitution: line 74: syntax error near unexpected token `done'
    bash: command substitution: line 74: `            done'
    

    上記の条件を再度追加しようとしましたが、うまくいきませんでした。

  • 一時削除もしてみましたetc/bash_completion.dが役に立ちません。

  • 完成したリストを見ようとしましたが、complete -p私が探しているものがわかりません。

最終リクエスト

必要に応じてシェルスクリプトを直接作成したいと思います。このプロセスでは、これについてさらに学ぶことができます。本当に直したいです。どんな提案にも感謝します。

答え1

Bashの完成はモジュラーです。さまざまなパッケージが独自の完成拡張を提供します。他のパッケージにエラーがある可能性があります。mv /etc/bash_completion.d{,.old}問題が解決することを確認してください。その場合は、もう一度戻ると、mv /etc/bash_completion.d{.old,}個々のファイルをディレクトリから1つずつ移動して、問題を引き起こすファイルを見つけます。/etc/bash_completion.d(このディレクトリはペパーミントでは名前が多少異なる場合があります。)

答え2

まだ正式に言及することはできませんので、他の方向を指す部分的な回答を提供します。キーバインディングを確認できますか?

$ bind -p | grep -i tab

私は過去に人々がTabキーを機能に接続することに決めた状況に直面していました。別のオプションは、次のように "-x"パラメーターを使用してbashシェルを分岐することです。

$ bash -x

テストを繰り返します。代わりに使用しても、echoこれは起こりますかcd

$ echo b <tab>

関連情報