Нужно более гуманное завершение переменных среды - PullRequest
2 голосов
/ 13 июля 2011

Предположим, у нас есть эта среда:

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

Из коробки, завершение bash $ TEST крайне противоречиво.Свидетель: →

$ 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 выполняет завершение, которое всегда завершает $TES до $TEST/ (если расширяется $TESTв каталог-имя) или $TEST (если это не так) и никогда ничего не расширяется.Который, по моему высокомерному мнению, Правильное, и Баш совершенно неправильно.

Так что вопрос очевиден.Можно ли заставить bash делать правильные вещи, и если да, то как?Я пытался понять руководство , но без особого успеха.

1 Ответ

1 голос
/ 03 августа 2011

Завершение вкладки в Bash чрезвычайно настраиваемо и довольно сложно.Если вы находитесь в Ubuntu, возможно, обратите внимание https://bugs.launchpad.net/ubuntu/+source/bash-completion/+bug/769866

...