mamechan08
@mamechan08 (Chiri)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

linux環境変数のタブ補完?値取得についての質問

linuxのコマンドライン上での
環境変数のタブキーでの値取得(変換)について質問です。

以下のようなディレクトリ構造があるとして

/home/user/file/aaa
/home/user/file/bbb
/home/user/file/ccc

/home/user/file
へのアクセス頻度が高いため、
.bash_profileに環境変数を設定しています。

.bash_profile
export FILE=/home/user/file

以前は

cd $FILE[ここまで打ってタブキーを押す]

これで

cd /home/user/file

と表示され、そのままa[tab]と打つことで

cd /home/user/file/aaa

とタブ補完されていました。



しかしシステムが変わってしまい、それ以降環境変数を入力してタブを打っても元の値に変換されなくなってしまいました。

以前はaaaディレクトリに行くのに

cd $FILE[tab]a[tab]

で一発で行けていたのに、今は

cd $FILE
cd a[tab]

と2段階打ち込まねばならず、軽微ながらストレスです。

解決策をご存じの方はいらっしゃいますか?

1

1Answer

bash-4.2 でオプション direxpand が導入されました。
shopt -s direxpand で以前と同じ振舞いになるようです。

f. There is a new shell option, `direxpand', which makes > filename completion expand variables in directory names in the way bash-4.1 did.
-- https://tiswww.case.edu/php/chet/bash/NEWS

direxpand
If set, Bash replaces directory names with the results of word expansion when performing filename completion. This changes the contents of the readline editing buffer. If not set, Bash attempts to preserve what the user typed.
-- 4.3.2 The Shopt Builtin


先頭に変数を使用して cd したい場合は、shopt -s autocd しておき、コマンドでは cd を省略する方法もあります。

4Like

Comments

  1. @mamechan08

    Questioner

    shoptコマンドでオプションを調べたところ、
    おっしゃる通り、direxpandがoffになっていました。
    shopt -s direxpandをコマンドで打って再度確認したところ
    direxpand onとなり、以前のようにタブで変数を変換することができました。

    bashのオプションは触ったことがなくちんぷんかんぷんだったので
    以下のサイトも参考にしましたが、おかげさまで無事解決できました。
    https://orebibou.com/ja/home/201704/20170411_001/

    autocdなんて便利なオプションもあるのですね!
    便利そうなので使ってみます。

    ご回答ありがとうございました。

Your answer might help someone💌