首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表单中的zsh完成--host=hostname

表单中的zsh完成--host=hostname
EN

Unix & Linux用户
提问于 2021-02-15 03:27:55
回答 1查看 94关注 0票数 2

我有一个自定义脚本,它需要一个--host=hostname形式的参数,并且允许一个可选的参数-n, --dry-run

我已经创建了zsh完成,其中提供了可选的参数:

代码语言:javascript
复制
#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=hostname之后,可选地提供--dry-run之后,不提供其他完成(即不提供本地文件名)。
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-02-15 09:21:20

( 1+2)向_arguments添加类似于以下参数的内容:

代码语言:javascript
复制
    '--host=[specify host]:host:_hosts'

方括号中的部分是一个可以改进的描述。

  1. --dry-run添加到args中成为条件。(( CURRENT > 2 ))从第二个单词开始添加它。(( $words[(I)--host*] ))检查命令行中是否存在--host。这取决于什么是合适的。
  2. 这应该是默认情况。

你在你的函数中有一些多余的元素。不需要将_sync-data.sh定义为文件的整个内容,然后调用它。只有当您从一个函数中定义了多个函数时,这才会有用。可自变量函数已经是一个函数了。同时,&& return也是多余的。函数传递最后一个命令的返回状态。

按照注释请求,整个代码如下:

代码语言:javascript
复制
#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'
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/634518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档