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 배열을 수정하려고 시도했지만 소용이 없었습니다.