ターミナルの自動完了が `services`コマンドに対して何も提案しないことがあるのはなぜですか?


17

端末にコマンドを入力すると、コマンドが間違っていなくても、端末のオートコンプリートが機能しないことがあります。

たとえば、これを見てください:sudo service vsftpd statussudoとserviceは問題ありません。あなたが入力したとき、私は、意味シュッド + tab端子はあなたが示唆SUDOまたはIタイプSERVI + 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.dsystemd追加されることはありません。設定ファイルをに置きます/etc/systemd/system/vsftpd.servicesystemctl list-units現時点では、Ubuntuにsystemctlコマンドが含まれていないという事実がなければ、そのファイルが見つかります。

そのため、現時点ではのオートコンプリートは取得しませservice vsftpdんが、他のほとんどのサービスでは設定ファイルがにあるため、これらのサービスは完了します/etc/init.d


この答えを見つけた人のために:14.xx、16.xx 18.xxでは、サービスの検索完了(および検索/解析の時間)が常に問題でした:良い例:(sudo systemctl ステータスまたは停止)lightd(TAB /ダブルTAB)(インストールされていると仮定して、完全な「lightdm.service」を意味します-アクティブ/実行中かどうか)このsvcはユニット出力と/etc/init.d私のマシンの両方にあります。他のサービスでも同じ問題が見つかりました。また、完了に時間がかかるバグ(?)もあります。それは私にビープ音を発する前に10秒以上座っているのを見つけました。github.com/systemd/systemd/issues/7185
bshea

9

複数の可能な提案がある場合tab、提案は作成されません。tab tab(ダブルタブ)を使用すると、考えられるすべての提案のリストが作成されます。


私が使用した:タブ+タブはvsftpdでは動作しません。あなたとRinzwindの提案は、例えばsu + tab + tabなどの仕事です。しかし、vsftpdは機能しません。
モハマドレザレスワニ

あなたはそれが最初で、小さなプログラムにvsftpdをインストールしテストすることができ須藤はapt-getのvsftpdをインストールしてから、タブ+タブ試す
モハマド・レザ・Rezwani

2
パラメータの場合、tab + tabは機能しません。ではsudo service vsftpd status、vsftpdはサービスのパラメーターであるため、ダブルタブでは見つかりません。OPはこの時点で正しいです。
ジョス

2
@Josしかしapache2networkingオートコンプリートなどの他のサービス。それらはどう違いますか?
ダン

@ dan08私は訂正します。また、sudo service networking tab tab提供しますforce-reload reload restart start stop。だから、思ったよりもさらにうまく機能します。
ジョス

6

vsftpdにはおそらく複数のオプションがあります。tab可能性を表示するには2回。

例:litabtabショー:

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に入れてsuTab / Tabを押すと、すべてのユーザーが表示されます。こちらをご覧ください


0

systemctl list-units --full --all無効なサービスがリストされていないことがわかったので、オートコンプリートは

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

0

servicesコマンドは「systemctl list-units --full --all」に依存しており、起動できない(または上記のように無効になっている)サービスを一覧表示せず、この問題が発生したかどうかを確認できます

systemctl status <service_name>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.