it-swarm-ko.tech

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

Bash를 두 번 탭할 때 bash가 정확히 무엇을 표시하는지 알 수있는 방법이 있습니까? 예를 들어 python script scpy이 있는데 몇 개의 인수가 필요합니다. 예를 들어 apt-get, 두 번 탭하면

 autoclean build-dep clean dselect-upgrade 제거 소스 업그레이드 
 autoremove dist-upgrade install 제거 업데이트 

자신의 스크립트/프로그램을 위해 그렇게 할 수있는 방법이 있습니까? bash 스크립트에서 python 스크립트를 래핑해야합니까?

28
Falmarri

가장 쉬운 방법은 /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").

32
Steven D

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

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

출처 : https://askubuntu.com/a/483149/24155

9
Eduardo Cuomo