--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
하지만 다음과 같이 필수 항목을 어떻게 추가합니까 ?
- 첫 번째 인수로 수행됩니다.
- 다음 부분은 제가 완료한 내용
=
을 바탕으로 작성되었습니다._hosts
--dry-run
--host=
필수 옵션 제공 후 완료 제공--host=hostname
After가 제공되고 선택적으로--dry-run
다른 완성은 제공되지 않습니다(즉, 로컬 파일 이름 없음).
답변1
1+2) 다음 내용을 _arguments에 매개변수로 추가합니다.
'--host=[specify host]:host:_hosts'
대괄호 안의 부분은 개선이 필요할 수 있는 설명입니다.
추가를 조건부로
--dry-run
만듭니다args
.(( CURRENT > 2 ))
두 번째 단어부터 추가를 시작합니다. 명령줄에 존재하는지 확인하세요(( $words[(I)--host*] ))
.--host
무엇이 적절한지에 따라 다릅니다.이것이 기본값이어야 합니다.
함수에 몇 가지 중복 요소가 추가되었습니다. 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'