Я недавно перешел из Scientific Linux 6 в CentOS 7 и у меня возникла проблема с завершением вкладки bash в новой ОС.Bash Tab Завершение имен файлов после аргументов
Версии программного обеспечения
$ cat /etc/redhat-release
CentOS Linux release 7.1.1503 (Core)
$ uname -r
3.10.0-229.14.1.el7.x86_64
$ bash --version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
У меня есть Баш скрипт (исполняемый) с именем ./run_prog.sh
, который принимает конфигурационный файл в командной строке, используя опцию -c (или длинный --config =).
Пример полной команды:
./run_prog.sh -c=./config/test-new-feature.conf
## or
./run_prog.sh --config=./config/test-new-feature.conf
В предыдущих версиях Баша я был в состоянии закладки полного каталога и имена файлов после -c = конструкта.
Пример ожидаемой вкладки полной (как он работал в SL6):
./run_prog.sh -c=./conf[TAB]
## completes to
./run_prog.sh -c=./config/
## then type
./run_prog.sh -c=./config/test-n[TAB]
## completes to
./run_prog.sh -c=./config/test-new-feature.conf
Новая версия Баш в CentOS 7 не завершат любые имена файлов после -c = короткий вариант.
Пример разбитого завершения вкладки в CentOS 7:
./run_prog.sh -c=./conf[TAB]
## doesn't complete anything
./run_prog.sh -c=./conf
Однако, если я отделить -c с пространством завершения файла работает, как ожидалось.
Пример работы автодополнения с пространством:
./run_prog.sh -c ./conf[TAB]
## completes to
./run_prog.sh -c ./config/
## then type
./run_prog.sh -c ./config/test-n[TAB]
## completes to
./run_prog.sh -c ./config/test-new-feature.conf
Вопрос
Как я могу получить новую версию Баша на вкладку полных имена файлов, как старая версия Баша сделал?
Редактировать
Этот сценарий имеет длинную версию для короткой опции -c, который --Config. Длинная версия тоже не работает.
./run_prog.sh --config=./conf[TAB]
## doesn't complete anything
./run_prog.sh --config=./conf
Это делает меня вещь, что Баш становится спутать с отсутствием расстояния между опцией переключателя (-c) и значением параметра.
Мой старый каталог Баш-завершения
$ ls -1 /media/old_hd/etc/bash_completion.d/
bzr
createrepo.bash
dkms
fcoeadm
fcoemon
gdbus-bash-completion.sh
git
gvfs-bash-completion.sh
lldpad
lldptool
perf
phoronix-test-suite
pk-completion.bash
rpmdevtools.bash-completion
subversion
yum.bash
yum-utils.bash
Мой новый каталог bash_completion
$ ls -1 /etc/bash_completion.d/
createrepo
dkms
fcoeadm
fcoemon
genpkgmetadata.py
git
lldpad
lldptool
mergerepo
mergerepo.py
modifyrepo
modifyrepo.py
redefine_filedir
scl.bash
yum
yummain.py
yum-utils.bash
У меня нет ответа на этот вопрос, но я думал, что я упомяну, что короткий вариант, который принимает '=', довольно необычен. Обычно короткие варианты либо принимают второй аргумент, либо '-cValue', а длинные опции принимают' --long-opt = Value' (или второй аргумент). –
Вы пытались сравнить версии/код завершения bash между двумя версиями? –
@EtanReisner Я попробовал both -c./con[TAB] и --config =./Con [TAB] и не работал. Это заставляет меня задуматься о том, что bash путается из-за нехватки места между переключателем опций и значением. Я обновил оригинальный вопрос, чтобы отразить это. – nick