Почему автоматическое завершение терминала иногда не предлагает ничего для команды «services»?

16

Иногда, когда я набираю команду на терминале, автозаполнение терминала не работает, даже если моя команда не ошибается.

Например, обратите внимание на это: sudo service vsftpd status sudo и service не имеют никаких проблем. Я имею в виду, когда вы введете терминал sud + , предложите sudo или введите servi + вкладку завершает работу с службой . Но для vsftpd я не получаю никаких предложений. Есть ли способ сказать: «терминал, пожалуйста, скажите мне какое-нибудь предложение !!?».

    
задан M R R 27.05.2014 в 21:02
источник

5 ответов

28

Степень, в которой работает автозаполнение, является функцией того, насколько хорошо работают скрипты оболочки в пакете bash-completion .

В Ubuntu 14.04 скрипт, обрабатывающий доработки для service , находится в /usr/share/bash-completion/bash_completion . Он ищет имена сервисов в файлах /etc/rc.d/init.d и /etc/init.d , а в выводе systemctl list-units --full --all .

Но установка пакета vsftpd не помещает файлы в /etc/init.d , потому что это было systemd -ified; он помещает файл конфигурации в /etc/systemd/system/vsftpd.service . systemctl list-units найдет этот файл, если не тот факт, что Ubuntu в настоящее время не содержит команду systemctl .

Итак, на данный момент вы не получите автоматическое завершение для service vsftpd , но вы будете использовать большинство других сервисов, так как их файлы конфигурации находятся в /etc/init.d .

    
ответ дан Mark Plotnick 28.05.2014 в 01:38
источник
9

Если есть несколько возможных предложений, вкладка не даст никаких предложений. Используя вкладку tab (двойная вкладка), вы получите список всех возможных предложений.     

ответ дан dan08 27.05.2014 в 21:16
6

vsftpd имеет, вероятно, более одного варианта. вкладка дважды, чтобы просмотреть возможности.

Пример: li с вкладкой показывает:

libnetcfg          line               lintian-info       lispmtopgm
libreoffice        linguist           linux32            listres
lightdm            link               linux64            
lightdm-session    lintian            linux-boot-prober  
    
ответ дан Rinzwind 27.05.2014 в 21:17
4

Вы можете создать свой собственный!

Например: положите complete -f -r -c su -d 'Username' -a '(cat /etc/passwd|cut -d : -f 1)' в bash, чем если у вас есть su и нажмите вкладку / вкладку, она даст вам всех пользователей, да. См. здесь

    
ответ дан elf12 28.05.2014 в 00:44
0

Я обнаружил, что systemctl list-units --full --all не отображает отключенные службы, поэтому автозаполнение не

# check if enabled
systemctl is-enabled <service_name>
# enable
systemctl enable <service_name>
    
ответ дан Lluís 14.02.2016 в 10:12