다음과 같은 프로그램을 사용 svn
하고 Gnome Terminal에 입력하면 다음과 같습니다.
svn upd
그러면 Tab다음과 같이 자동 완성됩니다.
svn update
내 사용자 정의 bash 스크립트에서 이와 같은 작업을 수행할 수 있습니까?
답변1
새 파일을 만들어야 합니다.
/etc/bash_completion.d/foo
정적 자동 완성( 예: --help
/ )의 경우 다음을 추가하세요.--verbose
_foo()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="--help --verbose --version"
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}
complete -F _foo foo
COMP_WORDS
현재 명령줄의 모든 개별 단어를 포함하는 배열입니다.COMP_CWORD
현재 커서 위치를 포함하는 단어의 인덱스입니다.COMPREPLY
Bash가 가능한 완성을 읽는 배열 변수입니다.
그리고 이 compgen
명령은 의 요소 배열을 반환 --help
하고 현재 단어와 일치 --verbose
합니다 .--version
"${cur}"
compgen -W "--help --verbose --version" -- "<userinput>"
답변2
여기에 완전한 튜토리얼이 있습니다.
admin.sh
자동 완성이 작동하도록 하려는 스크립트의 예를 살펴보겠습니다 .
#!/bin/bash
while [ $# -gt 0 ]; do
arg=$1
case $arg in
option_1)
# do_option_1
;;
option_2)
# do_option_2
;;
shortlist)
echo option_1 option_2 shortlist
;;
*)
echo Wrong option
;;
esac
shift
done
옵션을 참고하세요 shortlist
. 이 옵션을 사용하여 스크립트를 호출하면 이 스크립트에 대해 가능한 모든 옵션이 인쇄됩니다.
여기에 자동 완성 스크립트가 있습니다.
_script()
{
_script_commands=$(/path/to/your/script.sh shortlist)
local cur
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=( $(compgen -W "${_script_commands}" -- ${cur}) )
return 0
}
complete -o nospace -F _script ./admin.sh
완료할 마지막 인수는 자동 완성을 추가하려는 스크립트의 이름입니다. 당신이 해야 할 일은 자동 완성 스크립트를 bashrc에 다음과 같이 추가하는 것입니다.
source /path/to/your/autocomplete.sh
또는 다음 위치에 복사하세요.
/etc/bash_completion.d
답변3
당신은 사용할 수 있습니다프로그래밍 가능한 완성. /etc/bash_completion
및 몇 가지 예를 살펴보십시오 /etc/bash_completion.d/*
.
답변4
원하는 것이 간단한 단어 기반 자동 완성뿐인 경우(하위 명령 완성 등이 없음) 해당 complete
명령에는 -W
올바른 작업을 수행하는 옵션이 있습니다.
예를 들어, 다음과 같은 줄을 사용하여 다음 .bashrc
과 같은 프로그램을 자동 완성합니다.주피터:
# gleaned from `jupyter --help`
_jupyter_options='console qtconsole notebook' # shortened for this answer
complete -W "${_jupyter_options}" 'jupyter'
이제 jupyter <TAB> <TAB>
자동 완성됩니다.
그만큼문서gnu.org의 내용이 도움이 됩니다.
변수가 올바르게 설정되었는지 여부에 의존하는 것 같지만 IFS
이로 인해 아무런 문제가 발생하지 않았습니다.
파일 이름 완성 및 기본 BASH 완성을 추가하려면 다음 -o
옵션을 사용하십시오.
complete -W "${_jupyter_options}" -o bashdefault -o default 'jupyter'
complete
이를 zsh에서 사용하려면 다음에서 명령을 실행하기 전에 다음 코드를 추가하세요 ~/.zshrc
.
# make zsh emulate bash if necessary
if [[ -n "$ZSH_VERSION" ]]; then
autoload bashcompinit
bashcompinit
fi