Shell
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 "$@"
但是我怎樣才能添加 required
--host=hostname
,以便:
- 它作為第一個參數完成
- 之後的部分
=
是從我的完成中_hosts
完成的--dry-run
僅在提供所需選項後才提供--host=
完成- after
--host=hostname
提供,並且可選地--dry-run
,不提供其他完成(即,沒有本地文件名)。
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'