레이블을 두 번 클릭할 때 표시할 내용을 bash에 정확히 알릴 수 있는 방법이 있습니까? 예를 들어, scpy
여러 매개변수를 사용하는 Python 스크립트가 있습니다 . 예를 들어 apt-get
두 번 클릭하면 다음이 표시됩니다.
autoclean build-dep clean dselect-upgrade 소스 업그레이드 지우기 자동 제거 확인 dist-upgrade install 업데이트 제거
자신의 스크립트/프로그램에 대해 이 작업을 수행할 수 있는 방법이 있습니까? python 스크립트를 bash 스크립트로 래핑해야 합니까?
답변1
가장 쉬운 방법은 셸 스크립트를 포함시키는 것입니다 /etc/bash_completion.d/
. 파일의 기본 구조는 complete
bash 내장 함수를 실행하고 호출하는 간단한 함수입니다. complete
사용 방법에 대해 자세히 설명하는 대신 다음 내용을 읽어 보시기 바랍니다.Bash 완성 소개. 1부에서는 기본 사항을 다루고, 2부에서는 완성 스크립트를 작성하는 방법을 보여줍니다.
Bash 완료에 대한 더 자세한 설명은 "프로그램 가능 완료" 섹션에서 찾을 수 있습니다. man bash
("/프로그램 가능 완료"를 입력한 다음 "n"을 몇 번 누르면 빠르게 이동할 수 있습니다. 또는 운이 좋다면 "g"를 입력하면 됩니다. 2140화 돌아와요
답변2
기본안내입니다.
admin.sh
자동 완성 기능을 호출하려는 스크립트의 예를 살펴보겠습니다.
#!/usr/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
옵션에 주의하세요 shortlist
. 이 옵션을 사용하여 스크립트를 호출하면 스크립트에 대해 가능한 모든 옵션이 인쇄됩니다.
autocomplete.sh
스크립트 는 다음과 같습니다 .
#!/usr/bin/bash
_script() {
_script_commands=$(/path/to/your/admin.sh shortlist)
local cur prev
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=( $(compgen -W "${_script_commands}" -- ${cur}) )
return 0
}
complete -o nospace -F _script /path/to/your/admin.sh
완료할 마지막 매개변수는 자동완성 기능을 추가할 스크립트의 이름입니다. 당신이 해야 할 일은 자동완성 스크립트를 ~/.bashrc
다음과 /etc/bash_completion.d
같이 추가하는 것 뿐입니다:
source /full-path/to/your/autocomplete.sh
# or
. /full-path/to/your/autocomplete.sh
마지막으로 실행 가능하게 만듭니다.
chmod a+x admin.sh autocomplete.sh