web-dev-qa-db-ja.com

環境変数の自動補完

Bashのオートコンプリート機能は、11.04の環境変数では機能しないようです。現在の動作を以下に示します

export SCRIPT=/home/user/script
cd $SCRIPT/<tab>

\の前にバックスラッシュ($SCRIPT)が追加されます。つまり、プロンプトは

cd \$SCRIPT/

cdlsまたは他のコマンドで置き換えられた場合も同じことが起こります

また、$ SCRIPTに含まれるパスに実行可能ファイルがあり、それを実行したい場合

$SCRIPT/<tab>

Bashは、フォルダー内のオプションを表示しません(環境変数に含まれるパス内に単一のファイルがあるか、複数のファイル/ディレクトリがあるかに関係なく)。

つまり、オートコンプリートは環境変数では機能しません。

25
nilchat

このバグはbash 4.2で導入されました。ここには長いスレッドがあります:

http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html

要するに、bashの開発者であるChet Rameyは、まだそれを修正する方法がわからないのです。

13
geirha

古い動作を元に戻すには、次のコマンドを使用します

shopt -s direxpand

または.bashrcに含める

異なるバージョンのbashで同じ.bashrcを使用する場合は、

if ((BASH_VERSINFO[0] >= 4)) && ((BASH_VERSINFO[1] >= 2))
    then shopt -s direxpand
fi
10
user164395

http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html で提案されている回避策は次のとおりです。

  1. <Tab>を使用して、環境変数s.tを自動補完します。コマンドラインにはcd $MYVARと表示されます
  2. <Esc> + <Ctrl>-Eを押して、現在のコマンドラインを展開します。つまり、$MYVARをその値、パスで置き換えます
  3. /を追加してから、通常どおり<Tab>自動補完をお楽しみください

これは、あなたがemacsモード(set -o emacs)であり、cd(たとえばbash_completion)に対してcomplete -o nospace -F _cd cdを適切に設定していることを前提としています。

残念ながら、viモード(set -o vi)では機能しません。その場合、コマンドラインの展開が利用できないためです。

8
kynan

シェル変数を入力した後

cd $SCRIPT/

cntrl-Alt-Eと入力します。これは変数を展開します

cd /home/user/script/

これはFedora 16のEDITOR = viで機能します。

2
Scott C Wilson