명령 출력에서 ​​ZSH 사용자 정의 완성

명령 출력에서 ​​ZSH 사용자 정의 완성

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

  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]} )"
    
  2. 이 파일이 포함된 폴더가 에 있는지 확인하십시오 $fpath. 따라서 해당 폴더가 에 있다고 가정하면 ~/func파일에서 다음을 수행할 수 있습니다 .zshrc.
    fpath+=( ~/func )
    
  3. 파일 compinit을 호출했는지 확인하세요.~/.zshrc뒤쪽에에 디렉토리를 추가하십시오 $fpath. 그렇지 않으면 완료에 사용되지 않습니다.
    autoload -Uz compinit && compinit
    

관련 정보