我试过
alias sct='systemctl'
complete -F _systemctl sct
但是直到我在会话中运行原始命令 systemctl 时才找到函数 _systemctl。此函数以动态或以某种方式加载,并且内部包含许多其他相同的函数。
操作系统-Ubuntu 20.04
答案1
创建一个名为的文件/etc/bash_completion.d/systemctl
:
if [[ -r /usr/share/bash-completion/completions/systemctl ]]; then
. /usr/share/bash-completion/completions/systemctl && complete -F _systemctl systemctl sct
fi
您可以通过以下方式重新启动 bash-completion:. /etc/bash_completion
答案2
我在我的系统中找到了一个具有 systemctl 自动完成功能的文件,并添加了一行来加载它:
source /usr/share/bash-completion/completions/systemctl
alias sct='systemctl'
complete -F _systemctl sct
答案3
只是
alias sct='systemctl'
_completion_loader systemctl
complete -F _systemctl sct
但是我建议使用 bash 函数而不是 bash 别名,这样您就可以为子命令定义一些快捷方式,这里有一个示例:
sct ()
{
case $1 in
e)
shift;
sudo systemctl enable --now "$@"
;;
d)
shift;
sudo systemctl disable --now "$@"
;;
s)
shift;
systemctl status "$@"
;;
S)
shift;
sudo systemctl stop "$@"
;;
r)
shift;
sudo systemctl restart "$@"
;;
*)
systemctl "$@"
;;
esac
}
此外,为了使 bash 能够对这些快捷键进行补全,你需要将它们添加到VERBS
中对应键的数组中/usr/share/bash-completion/completions/systemctl
。以下是 的示例sct e
:
local -A VERBS=(
...
- [DISABLED_UNITS]='enable'
+ [DISABLED_UNITS]='enable e'
...
)
但这些修改/usr/share/bash-completion/completions/systemctl
可能会在更新后丢失。我还没有找到完美的方法来覆盖它,也许以后吧。