2

この環境があるとします。

mkdir -p /tmp/foo/bar/
export TEST=/tmp/foo

箱から出して、$TESTのbash完了は非常に一貫性がありません。目撃者:→

$ cd $TES<Tab>     →  $ cd $TEST<cursor>
$ cd $TEST<Tab>    →  $ cd $TEST<cursor>
$ cd $TEST/<Tab>   →  $ cd $TEST/<cursor> 
$ cd $TEST/b<Tab>  →  $ cd $TEST/b<cursor>        # no actual completion!

$ ls $TES<Tab>     →  $ ls $TES<cursor>           # no actual completion!
$ ls $TEST<Tab>    →  $ ls $TEST<cursor>          # same
$ ls $TEST/<Tab>   →  $ ls /tmp/foo/bar/<cursor>  # expands var, annoying!

$ echo $TES<Tab>   →  $ echo $TEST <cursor>        # with a space, annoying!
$ echo $TEST<Tab>  →  $ echo $TEST <cursor>        # same
$ echo $TEST/<Tab> →  $ echo /tmp/foo/bar/<cursor> # expands var, annoying!

これを、たとえばtcshが完了を行う方法と比較してください。これは、常にto(ディレクトリ名に展開される場合)またはto(展開されない場合)を完了$TES$TEST/$TEST$TESTも展開しません。これは、私の傲慢な意見では、正しいことであり、bashはそれを完全に間違っています。

したがって、質問は明白です。bashにTheRightThingを実行させることは可能ですか?その場合、どのように実行しますか?マニュアルを理解しようとしましたが、あまり成功しませんでした。

4

1 に答える 1

1

Bash でのタブ補完は非常に構成可能であり、非常に複雑です。Ubuntu を使用している場合は、https: //bugs.launchpad.net/ubuntu/+source/bash-completion/+bug/769866 に注意してください。

于 2011-08-03T04:51:18.697 に答える