특정 명령에 대해 사용자 정의 자동 완성을 지정하는 방법은 무엇입니까?


25

bash를 두 번 탭할 때 bash가 정확히 무엇을 표시하는지 알 수있는 방법이 있습니까? 예를 들어 scpy몇 가지 인수가 필요한 파이썬 스크립트 가 있습니다. 예를 들어 apt-get, 더블 탭을 사용하면

자동 청소 빌드-뎁 클린 dselect-upgrade 퍼지 소스 업그레이드
자동 제거 확인 dist-upgrade 설치 제거 업데이트  

자신의 스크립트 / 프로그램을 위해 그렇게 할 수있는 방법이 있습니까? 파이썬 스크립트를 bash 스크립트로 감싸 야합니까?

답변:


31

가장 쉬운 방법은에 쉘 스크립트를 포함시키는 것입니다 /etc/bash_completion.d/. 이 파일의 기본 구조는 완료를 수행 한 다음 completebash 내장 함수를 호출하는 간단한 함수입니다 . 사용법에 대해 자세히 알아보기보다는 Bash Completion에 대한 소개를complete 읽는 것이 좋습니다 . Part 1은 기본 사항을 다루고 Part 2는 완성 스크립트 작성 방법에 대해 설명합니다.

bash 완료에 대한보다 자세한 설명은 "Programmable Completion"섹션에서 찾을 수 있습니다 man bash( "/ Programmable Completion"을 입력 한 다음 'n'을 몇 번 눌러 빠르게 도착할 수 있습니다. 또는 운이 좋으면 "g 2140 RETURN ").


8

기본 안내서는 다음과 같습니다.

자동 완성 기능을 사용하려는 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에 복사하십시오.

출처 : /ubuntu//a/483149/24155


3
'완벽한 튜토리얼'은 이것을 설명하기 위해 사용하는 문구가 아닙니다 ...
searchengine27
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.