我有一个自定义脚本,它需要一个--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之后,可选地提供--dry-run之后,不提供其他完成(即不提供本地文件名)。发布于 2021-02-15 09:21:20
( 1+2)向_arguments添加类似于以下参数的内容:
'--host=[specify host]:host:_hosts'方括号中的部分是一个可以改进的描述。
--dry-run添加到args中成为条件。(( CURRENT > 2 ))从第二个单词开始添加它。(( $words[(I)--host*] ))检查命令行中是否存在--host。这取决于什么是合适的。你在你的函数中有一些多余的元素。不需要将_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'https://unix.stackexchange.com/questions/634518
复制相似问题