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