Я хочу спросить bash, как бы он завершил строку, как если бы я набрал ее в оболочке и нажал вкладку. Например, если я наберу
ls /[TAB][TAB]
Я вижу список файлов и каталогов в /, которые могли бы завершить команду ls. Как мне спросить bash, как он завершит ls /, не набирая его и не нажимая tab? Я хочу что-то вроде:
query_complete 'partial command line string'
Я прочитал справочную страницу для полного и compgen, но не мог понять, как это сделать с ними.
Примечание. 'Ls /' - это не та команда, которая меня интересует, это просто пример. Я ищу общее решение для любой произвольной строки, представляющей частичную командную строку.
Вы можете попробовать:
compgen -o default /
Судя по всему, у Awesome WM есть хитрый трюк, чтобы справиться с этим.
Но я не могу заставить его работать должным образом. Дай мне знать, если тебе повезет больше.
Вы можете использовать функцию, которая использует 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