ipadd
自動的に完了するコマンドのカスタムコンプリートを作成しています。これには、システムでネットワークデバイスを指定できるOS X
パラメータがあります。--device
ネットワークデバイスを一覧表示するコマンドはOS X
次のとおりです。
networksetup -listallnetworkservices
出力は次のとおりです。
An asterisk (*) denotes that a network service is disabled.
Ethernet
Wi-Fi
Ethernet
しかし、コマンドの最初の行はネットワークインターフェイスではなく、コマンドのみを表示するように変更しました。Wi-Fi
networksetup -listallnetworkservices | sed -n '2,$p'
出力は次のとおりです。
Ethernet
Wi-Fi
私の質問は、このコマンドを保存してそれを使って自分のコマンドを自動補完する方法ですipadd
。私はあなたが使用できることを知っていますが、_files
これはシステム内でファイルを完成させることです。
よろしくお願いします:)
答え1
- というファイルを作成し、
_ipadd
次の内容を入力します。#compdef ipadd # The line above declares this function as providing completions to # `ipadd`. In addition, it's important that the file name starts with # an `_`, otherwise `compinit` won't autoload it. local output=$(networksetup -listallnetworkservices) # Split the output on newlines. local -a services=( ${(f)output} ) # Offer the second to the last line as completions. _arguments "*:network service:( ${services[2,-1]} )"
- このファイルを含むフォルダがあることを確認してください
$fpath
。したがって、そのフォルダがにあると仮定すると、~/func
ファイルで次のことができます.zshrc
。fpath+=( ~/func )
- ファイル
compinit
が呼び出されたことを確認してください。~/.zshrc
後ろににディレクトリを追加します$fpath
。それ以外の場合、完了には使用されません。autoload -Uz compinit && compinit