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 ))2番目の単語から追加を開始します。コマンドラインに存在することを確認してください(( $words[(I)--host*] ))--host何が適切かによって異なります。

  2. これがデフォルト値でなければなりません。

関数にいくつかの重複要素が追加されました。 aを_sync-data.shファイルの内容全体として定義してから呼び出す必要はありません。これは、1つの関数で複数の関数を定義する場合にのみ便利です。自動ロード機能はすでに機能です。さらに、これは&& 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'

おすすめ記事