Tại sao thiết bị đầu cuối tự động hoàn thành đôi khi không đề xuất bất cứ điều gì cho lệnh `services`?


17

Đôi khi, khi tôi gõ một lệnh trên thiết bị đầu cuối, tự động hoàn tất của thiết bị đầu cuối không hoạt động, ngay cả khi lệnh của tôi không sai.

Ví dụ, hãy xem điều này: sudo service vsftpd statussudo và dịch vụ không có vấn đề gì. Ý tôi là, khi bạn gõ sud + tabterminal đề nghị bạn sudo hoặc tôi gõ servi + tabterminal hoàn thành nó để phục vụ . Nhưng đối với vsftpd tôi không nhận được bất kỳ đề nghị nào. Có cách nào để nói, "thiết bị đầu cuối, xin vui lòng cho tôi biết bất kỳ đề nghị nào !!?".

Câu trả lời:


28

Mức độ hoàn thành tự động hoạt động là một chức năng của các kịch bản shell trong bash-completiongói hoạt động tốt như thế nào .

Trong Ubuntu 14.04, các kịch bản xử lý hoàn tất cho servicelà trong /usr/share/bash-completion/bash_completion. Nó tìm tên dịch vụ dưới dạng tệp trong /etc/rc.d/init.d/etc/init.d, và ở đầu ra của systemctl list-units --full --all.

Nhưng việc cài đặt vsftpdgói không đưa bất kỳ tập tin nào vào /etc/init.d, bởi vì nó đã được xác thực systemd; nó đặt một tập tin cấu hình trong /etc/systemd/system/vsftpd.service. systemctl list-unitssẽ tìm thấy tệp đó nếu không phải vì thực tế là Ubuntu, vào thời điểm hiện tại, không bao gồm một systemctllệnh.

Vì vậy, hiện tại, bạn sẽ không nhận được tự động hoàn thành service vsftpd, nhưng bạn sẽ cho hầu hết các dịch vụ khác, vì các tệp cấu hình của chúng nằm trong /etc/init.d.


Đối với những người tìm thấy câu trả lời này: Việc hoàn thành các dịch vụ tìm kiếm (và thời gian để tìm / phân tích cú pháp) luôn là một vấn đề theo 14.xx, 16.xx 18.xx: Ví dụ hay: sudo systemctl (trạng thái hoặc dừng) lightd(TAB / Double TAB) ( Có nghĩa là hoàn thành 'lightdm.service' giả sử bạn đã cài đặt - kích hoạt / đang chạy hay chưa) Svc này có cả ở đầu ra đơn vị và /etc/init.dtrên máy của tôi. Tôi đã tìm thấy vấn đề tương tự trên các dịch vụ khác là tốt. Ngoài ra còn có một lỗi (?) Khiến nó mất nhiều thời gian để hoàn thành. Nhìn thấy nó ngồi hơn 10 giây trước khi phát ra tiếng bíp với tôi / không tìm thấy. github.com/systemd/systemd/issues/7185
bshea

9

Khi có nhiều đề xuất có thể, tabsẽ không tạo ra bất kỳ đề xuất nào. Sử dụng tab tab(tab đôi) sẽ tạo ra một danh sách tất cả các đề xuất có thể.


Tôi đã sử dụng: tab + tab không hoạt động cho vsftpd. Đề xuất của bạn và Rinzwind là công việc ví dụ su + tab + tab. Nhưng đối với vsftpd không hoạt động.
Mohammad Reza Rezwani

bạn có thể kiểm tra lần đầu tiên cài đặt chương trình nhỏ vsftpd bằng sudo apt-get install vsftpd và sau đó thử tab + tab
Mohammad Reza Rezwani

2
tab + tab không hoạt động trong trường hợp tham số. Trong sudo service vsftpd status, vsftpd là một tham số của dịch vụ và do đó sẽ không được tìm thấy với một tab kép. OP là chính xác tại thời điểm này.
Jos

2
@Jos Nhưng các dịch vụ khác như apache2networkingtự động hoàn thành. Họ khác nhau như thế nào?
Dân

@ dan08 Mình đứng sửa. Hơn nữa, sudo service networking tab tabsẽ cung cấp force-reload reload restart start stop. Vì vậy, nó hoạt động thậm chí còn tốt hơn tôi nghĩ.
Jos

6

vsftpd có thể có nhiều hơn 1 tùy chọn. tabhai lần để xem các khả năng.

Ví dụ: livới tabtabchương trình:

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

4

Bạn có thể xây dựng của riêng bạn!

Ví dụ: đưa complete -f -r -c su -d 'Username' -a '(cat /etc/passwd|cut -d : -f 1)'vào bash hơn nếu bạn có suvà nhấn tab / tab nó cung cấp cho bạn tất cả người dùng, yeah. Xem tại đây


0

Tôi thấy rằng systemctl list-units --full --allkhông liệt kê các dịch vụ bị vô hiệu hóa, vì vậy tự động hoàn thành không

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

0

Lệnh dịch vụ dựa trên "systemctl list-units --full --all" và không liệt kê các dịch vụ không thể khởi động (hoặc bị vô hiệu hóa như trên), để xác nhận nếu bạn gặp sự cố này, bạn có thể chạy

systemctl status <service_name>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.