systemdを使用すると、いくつかのキーストロークを保存するためにエイリアスを作成しました。
$ alias sctl='systemctl'
ただし、これによりサブコマンドのタブの完成が中断されます。タブの完成を中断せずにコマンドにエイリアスを追加できますか?
答え1
systemctl
まず、このコマンドがどの完全な機能を使用しているかを確認してください。
complete | grep " systemctl$"
出力は次のとおりです。
complete -F _functionname systemctl
次に、次を使用します。
complete -F _functionname sctl
エイリアスを完成する関数を登録します。
これで、入力したときとsctl <tab><tab>
同じ提案が表示されます。systemctl
答え2
インストール後このツール、次のようにすることができます。
存在する
~/.bash_profile
:alias sctl='systemctl'
存在する
~/.bash_completion
:complete -F _complete_alias sctl
コマンドを
sctl <tab>
表示するには、次のように入力します。systemctl
$ sctl <Tab> add-requires add-wants cancel cat condreload ...
答え3
systemctl+argsでも完了が機能するようにこれをハッキングしました。 systemctlが管理するbash-completionソースコードの一部をコピーしました(/usr/share/bash-completion/completions/systemctl)。
alias ssr='sudo systemctl restart'
alias sss='sudo systemctl status'
alias ssp='sudo systemctl stop'
# Load necessary functions in bash-completion's source code for systemctl (get_*_units)
source /usr/share/bash-completion/completions/systemctl
# Manually recreate some functions
_systemctl_status()
{
comps=$( __get_non_template_units --system "${COMP_WORDS[1]}" )
compopt -o filenames
COMPREPLY=( $(compgen -o filenames -W '$comps') )
return 0
}
_systemctl_restart()
{
comps=$( __get_restartable_units --system "${COMP_WORDS[1]}" )
compopt -o filenames
COMPREPLY=( $(compgen -o filenames -W '$comps') )
return 0
}
_systemctl_stop()
{
comps=$( __get_stoppable_units --system "${COMP_WORDS[1]}" )
compopt -o filenames
COMPREPLY=( $(compgen -o filenames -W '$comps') )
return 0
}
complete -F _systemctl_restart ssr
complete -F _systemctl_status sss
complete -F _systemctl_stop ssp
これは他のsystemctlコマンドに簡単に拡張できます。ソースファイルで正しい get_*_units コマンドを見つけて例をコピーします。
また、すべてのコマンドで動作する一般的な解決策を得るために$ COMP_WORDS配列を変更しようとしましたが、役に立ちませんでした。