Mengapa terminal otomatis selesai terkadang tidak menyarankan apa pun untuk perintah `layanan`?

17

Kadang-kadang, ketika saya mengetik perintah di terminal, autocomplete terminal tidak berfungsi, bahkan jika perintah saya tidak salah.

Misalnya, perhatikan ini: sudo service vsftpd statussudo dan layanan tidak memiliki masalah. Maksud saya, ketika Anda mengetik sud + tabterminal menyarankan Anda sudo atau saya ketik servi + tabterminal menyelesaikannya ke layanan . Tetapi untuk vsftpd saya tidak mendapatkan saran. Apakah ada cara untuk mengatakan, "terminal, tolong beri tahu saya saran apa pun !!?".

Mohammad Reza Rezwani
sumber

Jawaban:

28

Sejauh mana penyelesaian otomatis berfungsi adalah fungsi seberapa baik skrip shell dalam bash-completionpaket bekerja.

Di Ubuntu 14.04, skrip yang menangani penyelesaian untuk serviceberada di /usr/share/bash-completion/bash_completion. Itu mencari nama layanan sebagai file dalam /etc/rc.d/init.ddan /etc/init.d, dan dalam output dari systemctl list-units --full --all.

Tetapi menginstal vsftpdpaket tidak memasukkan file apa pun /etc/init.d, karena telah systemddiverifikasi; itu menempatkan file config di /etc/systemd/system/vsftpd.service. systemctl list-unitsakan menemukan file itu jika bukan karena fakta bahwa Ubuntu, pada saat ini, tidak termasuk systemctlperintah.

Jadi, saat ini, Anda tidak akan mendapatkan pelengkapan otomatis untuk service vsftpd, tetapi Anda akan melakukannya untuk sebagian besar layanan lain, karena file konfigurasi mereka ada di /etc/init.d.

Tandai Plotnick
sumber
Bagi mereka yang menemukan jawaban ini: Layanan pencarian penyelesaian (dan waktu untuk mencari / mem-parsing) selalu menjadi masalah di bawah 14.xx, 16.xx 18.xx: Contoh yang bagus: sudo systemctl (status atau berhenti) lightd(TAB / Double TAB) ( Berarti lengkap 'lightdm.service' dengan asumsi Anda telah menginstalnya - aktif / berjalan atau tidak) SVC ini baik dalam output unit dan /etc/init.dpada mesin saya. Saya juga menemukan masalah yang sama pada layanan lain. Ada juga bug (?) Yang membuatnya butuh waktu lama pada penyelesaian. Terlihat duduk 10+ detik sebelum berbunyi bip pada saya / tidak ditemukan. github.com/systemd/systemd/issues/7185
bshea
9

Ketika ada beberapa kemungkinan saran, tabtidak akan menghasilkan saran apa pun. Menggunakan tab tab(tab ganda) akan menghasilkan daftar semua saran yang mungkin.

Dan
sumber
Saya menggunakan: tab + tab tidak berfungsi untuk vsftpd. Saran Anda dan Rinzwind berfungsi misalnya su + tab + tab. Tetapi untuk vsftpd tidak bekerja.
Mohammad Reza Rezwani
Anda dapat menguji yang pertama menginstal program kecil vsftpd oleh sudo apt-get install vsftpd dan kemudian coba tab + tab
Mohammad Reza Rezwani
2
tab + tab tidak berfungsi jika parameter. Dalam sudo service vsftpd status, vsftpd adalah parameter layanan, dan karenanya tidak akan ditemukan dengan tab ganda. OP benar pada titik ini.
Jos
2
@ Jo Tapi layanan lain seperti apache2dan networkingpelengkapan otomatis. Bagaimana mereka berbeda?
Dan
@ dan08 Aku berdiri dikoreksi. Apalagi sudo service networking tab tabakan menawarkan force-reload reload restart start stop. Jadi itu bekerja lebih baik daripada yang saya kira.
Jos
6

vsftpd mungkin memiliki lebih dari 1 opsi. tabdua kali untuk melihat kemungkinan.

Contoh: lidengan tabtabpertunjukan:

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

Anda bisa membangun sendiri!

Misalnya: dimasukkan complete -f -r -c su -d 'Username' -a '(cat /etc/passwd|cut -d : -f 1)'ke dalam bash daripada jika Anda miliki sudan tekan tab / tab itu memberi Anda semua pengguna, ya. Lihat di sini

elf12
sumber
0

Saya menemukan bahwa systemctl list-units --full --alltidak mencantumkan layanan yang dinonaktifkan, jadi pelengkapan otomatis tidak

# check if enabled
systemctl is-enabled <service_name>
# enable
systemctl enable <service_name>
Llu
sumber
0

Perintah layanan bergantung pada "systemctl daftar-unit --full --all", dan tidak mencantumkan layanan yang tidak dapat memulai (atau dinonaktifkan seperti di atas), untuk mengonfirmasi jika Anda mengalami masalah ini, Anda dapat menjalankan

systemctl status <service_name>
bunga api
sumber