LINUX.ORG.RU

Автодополнение параметра скрипта по tab


0

1

Приветствую, уважаемые форумчане!
Пишу bash-скрипт, которому в качестве параметра передается имя ldap-пользователя. Возможно ли автодополнение имени пользователя по нажатии <tab> ? Т.е. :

root@hostname:~# myscript pu<tab>
root@hostname:~# myscript pupkin 

К примеру, для команды id это работает:

root@hostname:~# id pu<tab>
root@hostname:~# id pupkin 

Ответ на: комментарий от imul

Да, потому что в системных пользователях pupkin'а нет.

Poherless
() автор топика
Ответ на: комментарий от xorik

Всем спасибо, ответ найден на основе этой статьи.
Если кому будет интересно, последовательность действий (для Debian-like) такова.

1. Раскоментируем в файле /etc/bash.bashrc строки:

 
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
     . /etc/bash_completion
fi

2. Создаем файл /etc/bash_completion.d/myscript_compl

  1 have myscript &&
  2 
  3 _myscript() {
  4 ## COMPREPLY  - Это массив, из которого bash получает возможные дополнения. 
  5 ## COMP_WORDS - Это массив, содержащий уже введённые аргументы.
  6 ## COMP_CWORD - Это индекс в предыдущем массиве для редактируемого в данный момент аргумента.
  7 
  8     COMPREPLY=() #пока что мы не знаем, что предложить пользователю, поэтому создадим пустой список.
  9     cur="${COMP_WORDS[COMP_CWORD]}" #получаем текущий вводимый аргумент
 10     
 11     if [[ ${COMP_CWORD} == 1 ]] ; then #если вводится первый аргумент, то попробуем его дополнить
 12         COMPREPLY=( $(compgen -W "`getent passwd | cut -d: -f1`" -- ${cur}) ) #some magic
 13         return 0 #COMPREPLY заполнен, можно выходить
 14     fi  
 15 }   
 16 
 17 complete -F _myscript myscript  # Регистрируем функцию для скрипта
 18 

3. Перелогиниваемся в shell.

Poherless
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.