zsh 완료 형식은 --host=hostname입니다.

zsh 완료 형식은 --host=hostname입니다.

--host=hostname양식 매개변수가 필요 하고 선택적 매개변수를 허용하는 사용자 정의 스크립트가 있습니다 -n, --dry-run.

zsh선택적 매개변수가 제공되는 완성을 만들었습니다 .

#compdef sync-data.sh

_sync-data.sh () {
  local -a args

  args+=(
    '(-n --dry-run)'{-n,--dry-run}'[show what would have been transferred]'
  )

  _arguments $args && return
}

_sync-data.sh "$@"

--host=hostname하지만 다음과 같이 필수 항목을 어떻게 추가합니까 ?

  1. 첫 번째 인수로 수행됩니다.
  2. 다음 부분은 제가 완료한 내용 =을 바탕으로 작성되었습니다._hosts
  3. --dry-run--host=필수 옵션 제공 후 완료 제공
  4. --host=hostnameAfter가 제공되고 선택적으로 --dry-run다른 완성은 제공되지 않습니다(즉, 로컬 파일 이름 없음).

답변1

1+2) 다음 내용을 _arguments에 매개변수로 추가합니다.

    '--host=[specify host]:host:_hosts'

대괄호 안의 부분은 개선이 필요할 수 있는 설명입니다.

  1. 추가를 조건부로 --dry-run만듭니다 args. (( CURRENT > 2 ))두 번째 단어부터 추가를 시작합니다. 명령줄에 존재하는지 확인하세요 (( $words[(I)--host*] )). --host무엇이 적절한지에 따라 다릅니다.

  2. 이것이 기본값이어야 합니다.

함수에 몇 가지 중복 요소가 추가되었습니다. a를 _sync-data.sh파일의 전체 내용으로 정의한 다음 호출할 필요가 없습니다 . 이는 하나의 함수에서 여러 함수를 정의하는 경우에만 유용합니다. 자동 로드 기능은 이미 기능입니다. 게다가 이것은 && return중복됩니다. 함수에는 마지막 명령의 반환 상태가 전달됩니다.

주석에서 요청한 전체 코드:

#compdef sync-data.sh

local -a args

(( $words[(I)--host*] )) && args+=(
  '(-n --dry-run)'{-n,--dry-run}'[show what would have been transferred]'
)

_arguments $args \
  '--host=[specify host]:host:_hosts'

관련 정보