web-dev-qa-db-ja.com

bash:タブ補完で変数名が展開されない

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?)は何ですか?

2

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に展開する必要があります。何がそれを防ぐのか分かりません。

4
Wandering Logic

TABの代わりにC-x $を試して、可能な変数(他のものではない)の補完を明示的に要求してください。

0

Dmitry Alexandrovによる rxvt-タブ展開環境変数 の答えを確認してください。

「これはdirexpandオプションについてです。

$ shopt -sdirexpandおよび$ FOO_PATH /

tABで展開します」

0
RaamEE