Perché il completamento automatico del terminale a volte non suggerisce nulla per il comando `services`?


17

A volte, quando digito un comando sul terminale, il completamento automatico del terminale non funziona, anche se il mio comando non è sbagliato.

Ad esempio, dai un'occhiata a questo: sudo service vsftpd statussudo e servizio non hanno alcun problema. Voglio dire, quando digiti sud + tabterminal suggerisci che sudo o io digito servi + tabterminal completi quello al servizio . Ma per vsftpd non ho alcun suggerimento. C'è un modo per dire "terminale, per favore dimmi qualche suggerimento !!?".

Risposte:


28

Il grado in cui funziona il completamento automatico dipende dal funzionamento degli script della shell nel bash-completionpacchetto.

In Ubuntu 14.04, lo script che maniglie completamenti per serviceè in /usr/share/bash-completion/bash_completion. Cerca i nomi dei servizi come file in /etc/rc.d/init.de /etc/init.de nell'output di systemctl list-units --full --all.

Ma l'installazione del vsftpdpacchetto non inserisce alcun file /etc/init.d, perché è stato systemd-ificato; inserisce un file di configurazione /etc/systemd/system/vsftpd.service. systemctl list-unitstroverebbe quel file se non fosse per il fatto che Ubuntu, al momento, non include un systemctlcomando.

Quindi, al momento, non otterrai completamenti automatici per service vsftpd, ma per la maggior parte degli altri servizi, poiché i loro file di configurazione sono presenti /etc/init.d.


Per coloro che trovano questa risposta: i servizi di ricerca del completamento (e il tempo di trovare / analizzare) è sempre stato un problema in 14.xx, 16.xx 18.xx: buon esempio: sudo systemctl (stato o stop) lightd(TAB / Double TAB) ( Significa 'lightdm.service' completo supponendo che sia installato - attivo / in esecuzione o meno) Questo svc è sia in unità di output che /etc/init.dsulla mia macchina. Ho riscontrato lo stesso problema anche su altri servizi. C'è anche un bug (?) Che richiede molto tempo per i completamenti. Visto sedersi 10+ secondi prima di emettere un segnale acustico / non trovato. github.com/systemd/systemd/issues/7185
bshea

9

Quando ci sono più possibili suggerimenti, tabnon produrrà alcun suggerimento. L'uso di tab tab(doppia scheda) produrrà un elenco di tutti i possibili suggerimenti.


Ho usato: tab + tab non funziona per vsftpd. Il suggerimento di te e Rinzwind è lavorare ad esempio su + tab + tab. Ma per vsftpd non funziona.
Mohammad Reza Rezwani,

puoi testare prima l'installazione di piccoli programmi vsftpd su sudo apt-get install vsftpd e quindi provare tab + tab
Mohammad Reza Rezwani

2
tab + tab non funziona in caso di parametri. In sudo service vsftpd status, vsftpd è un parametro di servizio e pertanto non verrà trovato con una doppia scheda. L'OP è corretto a questo punto.
Jos

2
@Jos Ma altri servizi come apache2e il networkingcompletamento automatico. Come sono differenti?
Dan,

@ dan08 Sono corretto. Inoltre, sudo service networking tab taboffrirà force-reload reload restart start stop. Quindi funziona anche meglio di quanto pensassi.
Jos

6

vsftpd ha probabilmente più di 1 opzione. tabdue volte per visualizzare le possibilità.

Esempio: licon tabtabspettacoli:

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

4

Puoi costruirne uno tuo!

Ad esempio: metti complete -f -r -c su -d 'Username' -a '(cat /etc/passwd|cut -d : -f 1)'in bash che se hai sue premi tab / tab ti dà tutti gli utenti, sì. Vedi qui


0

Ho scoperto che systemctl list-units --full --allnon elenca i servizi disabilitati, quindi il completamento automatico no

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

0

Il comando services si basa su "systemctl list-units --full --all" e non elenca i servizi che non possono essere avviati (o disabilitati come sopra), per confermare se si riscontra questo problema che è possibile eseguire

systemctl status <service_name>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.