Чому автоматичне завершення терміналу іноді нічого не пропонує команді `services '?


17

Іноді, коли я набираю команду на терміналі, автоматичне заповнення терміналу не працює, навіть якщо моя команда неправильна.

Наприклад, погляньте на це: sudo service vsftpd statusсудо і сервіс не мають жодних проблем. Я маю на увазі, коли ви вводите sud + tabтермінал, пропоную вам судо або я набираю серві + tabтермінал, доповнюйте його до сервісу . Але щодо vsftpd я не отримую жодної пропозиції. Чи є спосіб сказати: "термінал, будь ласка, скажіть будь-яку пропозицію !!?".

Відповіді:


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-відзначений; він ставить конфігураційний файл в /etc/systemd/system/vsftpd.service. systemctl list-unitsзнайшов би цей файл, якби не той факт, що Ubuntu в даний час не містить systemctlкоманди.

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


Для тих, хто знайшов цю відповідь: Служби пошуку завершення (та час пошуку / розбору) завжди були проблемою під 14.xx, 16.xx 18.xx: Хороший приклад: sudo systemctl (стан або зупинка) lightd(TAB / Double TAB) ( Означає повне 'lightdm.service', якщо ви встановили його - активний / запущений чи ні) Цей svc є як у вихідних одиницях, так і /etc/init.dна моїй машині. Я знайшов те саме питання і в інших службах. Існує також помилка (?), Яка змушує зайняти багато часу на завершення. Побачив, що він сидить 10+ секунд, перш ніж звучати на мене / не знайдений. github.com/systemd/systemd/issues/7185
bshea

9

Коли є кілька можливих пропозицій, tabне буде створюватися жодна пропозиція. Використання tab tab(подвійна вкладка) створить список усіх можливих пропозицій.


Я використав: tab + tab не працює для vsftpd. Ви та пропозиція Rinzwind - це робота, наприклад, su + tab + tab. Але для vsftpd не працює.
Мохаммед Реза Резвані

ви можете перевірити, що спочатку встановити невелику програму vsftpd by sudo apt-get install vsftpd, а потім спробувати tab + tab
Mohammad Reza Rezwani

2
у випадку параметрів не працює. У sudo service vsftpd status, vsftpd - це параметр послуги, тому не знайдеться з подвійною вкладкою. На даний момент ОП є правильним.
Джос

2
@Jos Але інші послуги , як apache2і networkingавтозаповнення. Чим вони відрізняються?
Дан

@ dan08 я стою виправлений. Більше того, sudo service networking tab tabзапропонують force-reload reload restart start stop. Так це працює навіть краще, ніж я думав.
Джос

6

vsftpd, ймовірно, більше ніж 1 варіант. tabдвічі для перегляду можливостей.

Приклад: liіз tabtabшоу:

libnetcfg          line               lintian-info       lispmtopgm
libreoffice        linguist           linux32            listres
lightdm            link               linux64            
lightdm-session    lintian            linux-boot-prober  

4

Ви можете побудувати свій власний!

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


0

Я виявив, що systemctl list-units --full --allне перераховано відключені служби, тому автоматичне завершення не робить

# check if enabled
systemctl is-enabled <service_name>
# enable
systemctl enable <service_name>

0

Команда сервісів покладається на "systemctl list-units --full --all", і не перераховує служби, які не вдається запустити (або відключити, як зазначено вище), щоб підтвердити, якщо виникає ця проблема, ви можете запустити

systemctl status <service_name>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.