Назад | Перейти на главную страницу

Как программно запросить завершение bash для данной строки

Я хочу спросить bash, как бы он завершил строку, как если бы я набрал ее в оболочке и нажал вкладку. Например, если я наберу

ls /[TAB][TAB]

Я вижу список файлов и каталогов в /, которые могли бы завершить команду ls. Как мне спросить bash, как он завершит ls /, не набирая его и не нажимая tab? Я хочу что-то вроде:

query_complete 'partial command line string'

Я прочитал справочную страницу для полного и compgen, но не мог понять, как это сделать с ними.

Примечание. 'Ls /' - это не та команда, которая меня интересует, это просто пример. Я ищу общее решение для любой произвольной строки, представляющей частичную командную строку.

Вы можете попробовать:

compgen -o default /

Судя по всему, у Awesome WM есть хитрый трюк, чтобы справиться с этим.

https://stackoverflow.com/questions/3520936/accesssing-bash-completions-for-specific-commands-programmatically

Но я не могу заставить его работать должным образом. Дай мне знать, если тебе повезет больше.

Вы можете использовать функцию, которая использует bash Расширение параметров, как это:

expand(){ echo ${a:+$1}; }; expand "ls /*"

Но вам нужно заменить [TAB] [TAB] на «*».

Я думаю, что для вас хороший вариант - изучить функции bash, которые вы можете написать для своего файла .bashrc. Я предполагаю, что вы в конечном итоге набираете команды снова и снова и хотите ускорить процесс. Вот пример из моего файла .bashrc:

newmod() {
mkdir -p ${1}/{manifests,files,templates} && \
echo "class $1" >> ${1}/manifests/init.pp && \
echo "class ${1}::conf" >> ${1}/manifests/conf.pp && \
echo "class ${1}::packages" >> ${1}/manifests/packages.pp
} 

Я создаю множество марионеточных модулей. Эта функция при вызове из оболочки выполняет для меня следующую работу:

[configmgr@mback-dev ~]$ newmod testmodule
[configmgr@mback-dev ~]$ tree testmodule/
testmodule/
|-- files
|-- manifests
|   |-- conf.pp
|   |-- init.pp
|   `-- packages.pp
`-- templates

3 directories, 3 files
[configmgr@mback-dev ~]$ 

Файлы заполняются каркасами для класса модулей, пакетов и конфигурации. Это меня спасает тонны набора текста!

HTH, ztron