Bashバージョン「3.2.51(1)-release」(OS:SUSE Linux Enterprise Server 11.1(x86_64))のリモートコンピューターでは、変数名を使用して通常のタブ補完を実行できませんでした。たとえば、次のように入力します。
echo $OLDPWD/
次に、スラッシュの最後で「Tab」キーを押すと、変数名が古いディレクトリ名に展開されます(最後のcd
またはpushd
コマンドの前)。これは私自身のラップトップで動作します(Debian 7、Bash 4.2.37(1)-リリース)。このSLESbashシェルではなぜ機能しないのですか?
同様に、私が入力した場合
echo $OLDP
次に、「P」の最後にある「Tab」を押すと、bashはそれを$OLDPWD
に完了します。これは、SLES11のbashでも発生しません。
この動作に影響を与える制御変数(shopt?set?)は何ですか?
shopt -s direxpand
は、bash4.2でecho $HOME/<tab>
をecho /home/matt/
に展開します。 bash 4.1では、これがデフォルトになっているはずです。
bash-completion
は本当に物事を台無しにする可能性があることがわかりました。私は常にbash-completion
をアンインストールするか、complete -r
を実行して、個々の完了ルールがデフォルトの完了に対して愚かなことをしていないことを確認します。
$OLDPWD
が実際に設定されている場合、echo $OLDP<tab>
はecho $OLDPWD
に展開する必要があります。何がそれを防ぐのか分かりません。
TAB
の代わりにC-x $
を試して、可能な変数(他のものではない)の補完を明示的に要求してください。
Dmitry Alexandrovによる rxvt-タブ展開環境変数 の答えを確認してください。
「これはdirexpandオプションについてです。
$ shopt -sdirexpandおよび$ FOO_PATH /
tABで展開します」