シェル変数のタブ拡張/自動補完を使用するためにcdを使用できないのはなぜですか?

シェル変数のタブ拡張/自動補完を使用するためにcdを使用できないのはなぜですか?

次の位置に変数が設定されています.bashrc

export SOME_DIR=/path/to/some/dir

ls入力するとls $SOME_DIR[tab]変数が拡張され、ファイルシステムを掘り下げるときにタブオートコンプリートを使用できるようになりました。しかし、試してみるとcd $SOME_DIR[tab]何もcd $SOME_DIR/[tab]起こりません。

なぜこれだけが適用されますかls?と連携させることは可能ですかcd?に
追加しようとしましたが、効果はありません。shopt -s direxpand.bashrc

答え1

明らかにshopt -s direxpandそれは組み込みを除いて動作しますcd。だから私は自分のプロフィールに追加し、TABを使用するのと同じ方法alias xy=cdで動作しますxy。 (誰がこんなに簡単だと思いましたか?)cddirexpand

答え2

Cygwinでは、シェル変数を引用符で囲む必要があるのと同じ問題がありました。たとえば、cd $ccc 拡張されませんが、拡張され、カーソルcd "$ccc"はまだ正しい引用符の前にあります。

答え3

ディレクトリがない可能性がありますか/path/to/some/dir/cd $SOME_DIR/[tab]私はシステムを試してみましたが、うまくいきます。

答え4

(以前)bash 4.2.37ではほぼ同じ問題がありましたが、bash 4.3または4.4ではそうではありませんでした。
つまり、拡張機能は動作しますがls動作しませんcd


しかし、セカンダリキーバインディングとして次のように定義しました(eSファン):

Ctrl-s~/.inputrc

Control-s: shell-expand-line

これにより、次のように入力できます。cd $SOME_DIR次に変数を次に展開しますCtrls

cd /path/to/some/dir

同様に便利なキーバインディングは次のとおりです。Gドロップボール):

Ctrl-g私のもの~/.inputrc

Control-g: glob-expand-word

これにより、入力してls b*拡張できCtrlます。gb*

$ ls b*<kbd>Ctrl</kbd>-<kbd>s</kbd>
$ ls bash.html_node.tar.gz bash.pdf

これにより、コマンドラインを編集し、必要に応じて要素を追加または削除できます。

関連情報