Bashのオートコンプリート機能は、11.04の環境変数では機能しないようです。現在の動作を以下に示します
export SCRIPT=/home/user/script
cd $SCRIPT/<tab>
\
の前にバックスラッシュ($SCRIPT
)が追加されます。つまり、プロンプトは
cd \$SCRIPT/
cd
がls
または他のコマンドで置き換えられた場合も同じことが起こります
また、$ SCRIPTに含まれるパスに実行可能ファイルがあり、それを実行したい場合
$SCRIPT/<tab>
Bashは、フォルダー内のオプションを表示しません(環境変数に含まれるパス内に単一のファイルがあるか、複数のファイル/ディレクトリがあるかに関係なく)。
つまり、オートコンプリートは環境変数では機能しません。
このバグはbash 4.2で導入されました。ここには長いスレッドがあります:
http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html
要するに、bashの開発者であるChet Rameyは、まだそれを修正する方法がわからないのです。
古い動作を元に戻すには、次のコマンドを使用します
shopt -s direxpand
または.bashrc
に含める
異なるバージョンのbashで同じ.bashrcを使用する場合は、
if ((BASH_VERSINFO[0] >= 4)) && ((BASH_VERSINFO[1] >= 2))
then shopt -s direxpand
fi
http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html で提案されている回避策は次のとおりです。
<Tab>
を使用して、環境変数s.tを自動補完します。コマンドラインにはcd $MYVAR
と表示されます<Esc>
+ <Ctrl>-E
を押して、現在のコマンドラインを展開します。つまり、$MYVAR
をその値、パスで置き換えます/
を追加してから、通常どおり<Tab>
自動補完をお楽しみくださいこれは、あなたがemacsモード(set -o emacs
)であり、cd
(たとえばbash_completion
)に対してcomplete -o nospace -F _cd cd
を適切に設定していることを前提としています。
残念ながら、viモード(set -o vi
)では機能しません。その場合、コマンドラインの展開が利用できないためです。
シェル変数を入力した後
cd $SCRIPT/
cntrl-Alt-Eと入力します。これは変数を展開します
cd /home/user/script/
これはFedora 16のEDITOR = viで機能します。