Bashで遅いオートコンプリートをデバッグして修正する方法は?

Bashで遅いオートコンプリートをデバッグして修正する方法は?

最近のアップデート(Ubuntu 12.04 LTS)以降、コマンドラインのTABは非常に遅くなります。コマンドの一部(例evi [TAB]:)またはファイル名の一部(例:)を入力したevince somedocu[TAB]後、シェルは時々(常にそうではない)数秒間停止します。

個人的には、遅いオートコンプリート機能よりも強力なオートコンプリート機能を好みます。簡単に修正する方法はありますか?

編集する:コメントに関する追加情報:

  • PATHはかなり標準的です。 ~/bin には bash スクリプトがあります。

    $ echo $PATH
    /home/USERNAME/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
    
  • 作業ディレクトリのファイル数が100未満です。

  • 異常なディスクアクティビティ(システムアップグレード)後、オートコンプリート機能は特に遅くなります。そのため、/usr/binやその他のディレクトリを再度読み込むと、遅延が発生する可能性があります。

ベストアンサー1

問題を解決する方法がわかりません。遅延を引き起こす可能性のあるすべての種類があります。しかし、調査のためにいくつかの提案をすることができます。

推測するには、検索パスにあるディレクトリの1つ($PATHまたはbashが完了データを探している場所)が応答が遅いファイルシステムに存在する可能性があります。通常、リモートファイルシステムは遅いですが、ハードドライブのエラー、FUSEドライバの停止などが原因である可能性があります。

調査の最初のステップは、set -xシェルの実行を追跡して完了を生成するコマンドを実行することです。どこで止まるのを見てください。完了したら、トレースオフを使用してくださいset +x

情報が足りない場合は、大きな銃を入手してください。シェルのプロセスID(echo $$)を書き留めます。他の端末でstrace -f -s9999 -p$$以下を実行します。ストレス他のUnixバージョンで実行している場合)。 Straceは、プロセスで実行されたシステムコールを一覧表示します。アクセスしてはいけないファイルにアクセスしているようであるか、特定のファイルへのアクセスが遅いかどうかを確認してください。コマンドライン-Tにオプションを追加すると、各システムコールに費やされた時間を表示できます。strace

おすすめ記事