명령줄 별칭에서 탭 완성 기능을 사용하고 싶습니다. 예를 들어 다음 별칭을 정의한다고 가정하겠습니다.
alias apt-inst='sudo aptitude install'
Tab 키를 눌렀을 때 aptitude에서 제공하는 완성을 얻을 수 있는 방법이 있나요? 즉, "sudo aptitude install gnumer"라고 쓰고 탭을 누르면 aptitude가 gnumeric으로 완료하거나, 확실하지 않은 경우 gnumer로 시작하는 사용 가능한 모든 패키지를 나열합니다. 내 별칭을 사용하여 이 작업을 수행하면 아무 일도 일어나지 않습니다. 아무 작업도 수행되지 않습니다.
답변1
노력하다전체 별칭, 이 문제를 정확하게 해결합니다. (부인 성명complete_alias
: 나는)의 저자입니다
일단 설치되면 공통 함수를 사용하여 다음과 같은 많은 별칭을 수행할 수 있습니다.
complete -F _complete_alias <myalias1>
complete -F _complete_alias <myalias2>
complete -F _complete_alias <myalias3>
complete_alias
또는 유사한 를 통해 각 bash 인스턴스에서 이 파일을 얻을 수 있습니다 .bash_profile
.
설치하다
mkdir ~/.bash_completion.d
curl https://raw.githubusercontent.com/cykerway/complete-alias/master/complete_alias \
> ~/.bash_completion.d/complete_alias
애플리케이션
source ~/.bash_completion.d/complete_alias
alias container=docker\ container
complete -F _complete_alias container
container
이제 _docker()
원래 완료 처리기에 의해 자동으로 완료될 수 있습니다.
$ container l<Tab>
logs ls
$ container s<Tab>
start stats stop
답변2
가지다Ubuntu 포럼에는 이 문제에 대한 훌륭한 스레드가 있습니다.. Ole J는 다음과 같은 별칭 완성 정의 기능을 제안했습니다.
function make-completion-wrapper () {
local function_name="$2"
local arg_count=$(($#-3))
local comp_function_name="$1"
shift 2
local function="
function $function_name {
((COMP_CWORD+=$arg_count))
# Quotes here are important
COMP_WORDS=( "$@" \"\${COMP_WORDS[@]:1}\" )
"$comp_function_name"
return 0
}"
eval "$function"
echo $function_name
echo "$function"
}
이를 사용하여 별칭에 대한 완성 함수를 정의한 다음 해당 함수를 별칭의 완성자로 지정합니다.
make-completion-wrapper _apt_get _apt_get_install apt-get install
complete -F _apt_get_install apt-inst
나는 기존 프로그램에 일반적으로 사용되는 매개변수를 추가하기 위해 별칭을 사용하는 것을 선호합니다. 예를 들어 grep
저는 항상 장치와 바이너리를 건너뛰고 싶었기 때문에 grep
. 예를 들어 새 명령을 추가하려면 grepbin
폴더에 있는 쉘 스크립트를 사용합니다 ~/bin
. 폴더가 경로에 있으면 자동으로 수행됩니다.
답변3
이 문제는 인터넷 검색에서 끝났으므로 다른 답변의 방법을 시도했습니다. 실제로 이해하지 못하는 여러 가지 이유로 Ubuntu 16.04에서는 제대로 작동하지 않았습니다.
결국 나를 위해 일하게 된 것은 예상보다 사소한 일이었습니다. 와 동일한 자동 완성 rsync
기능을 사용하고 싶습니다 mycommand
. 그래서 자동완성 기능을 찾아서 그에 complete
맞게 호출했습니다.
# Lookup of name of autocompletion function used for rsync
_completion_loader rsync; complete -p rsync
# Returns: complete -o nospace -F _rsync rsync
# Sourcing the rsync functions before, then using the same function for 'mycommand'
. /usr/share/bash-completion/completions/rsync
complete -o nospace -F _rsync mycommand
면책조항: 다른 방법과 비교했을 때 내 방법의 단점이 무엇인지 잘 모르겠습니다. 나는 주로 사람들에게 도움이 될 수 있고 이 간단한 접근 방식으로 충분할 수 있기 때문에 이 글을 쓰고 있습니다.
답변4
2018 답변
"complete" 프로그램에 별칭을 추가해야 합니다. 달성하려는 자동 완성 유형에 따라 -c 또는 -F를 사용해야 합니다.
패키지 자동 완성의 경우:
complete -c name_of_your_alias
명령 자동 완성의 경우:
complete -F name_of_your_alias
별칭이 올바르게 추가되었는지 확인하려면 다음을 수행하세요.
complete | grep name_of_your_alias
마지막으로 "full"에서 별칭을 제거합니다.
complete -r name_of_your_alias
귀하의 경우:
complete -c apt-inst