Bash를 두 번 탭할 때 bash가 정확히 무엇을 표시하는지 알 수있는 방법이 있습니까? 예를 들어 python script scpy
이 있는데 몇 개의 인수가 필요합니다. 예를 들어 apt-get
, 두 번 탭하면
autoclean build-dep clean dselect-upgrade 제거 소스 업그레이드 autoremove dist-upgrade install 제거 업데이트
자신의 스크립트/프로그램을 위해 그렇게 할 수있는 방법이 있습니까? bash 스크립트에서 python 스크립트를 래핑해야합니까?
가장 쉬운 방법은 /etc/bash_completion.d/
에 Shell 스크립트를 포함시키는 것입니다. 이 파일의 기본 구조는 bash 내장 인 complete
의 완료 및 호출을 수행하는 간단한 함수입니다. complete
사용법에 대해 자세히 다루기보다는 Bash Completion 소개 를 읽는 것이 좋습니다. Part 1은 기본 사항을 다루고 Part 2는 완성 스크립트 작성 방법에 대해 설명합니다.
Bash 완료에 대한보다 자세한 설명은 man bash
의 "Programmable Completion"섹션에서 찾을 수 있습니다 ( "/ Programmable Completion"을 입력 한 다음 'n'을 몇 번 눌러 빠르게 도착할 수 있습니다). 행운을 빕니다, "g 2140 RETURN").
기본 안내서는 다음과 같습니다.
자동 완성 기능을 사용하려는 admin.sh라는 스크립트 예제를 사용할 수 있습니다.
#!/bin/bash
while [ $# -gt 0 ]; do
arg=$1
case $arg in
option_1)
# do_option_1
;;
option_2)
# do_option_1
;;
shortlist)
echo option_1 option_2 shortlist
;;
*)
echo Wrong option
;;
esac
shift
done
옵션 명단을 참고하십시오. 이 옵션으로 스크립트를 호출하면이 스크립트에 가능한 모든 옵션이 인쇄됩니다.
그리고 여기 자동 완성 스크립트가 있습니다 :
_script()
{
_script_commands=$(/path/to/your/script.sh shortlist)
local cur prev
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에 복사하십시오.