mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 18:10:56 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef hostname
 | |
| 
 | |
| local variant=$OSTYPE ret=1
 | |
| local -a context line state state_descr args aopts=( -A '-*' )
 | |
| local -A opt_args
 | |
| 
 | |
| # May be overridden below
 | |
| args=( '(-4 -6 -d -f -i -r -s)1: :_guard "^-*" "host name"' )
 | |
| 
 | |
| # On badly behaved systems it may be dangerous to call `hostname --help` or
 | |
| # similar, so for now we'll avoid _pick_variant and just trust this. In the
 | |
| # future, we should replace this by a method that can safely detect Solaris,
 | |
| # BusyBox, etc. (@todo)
 | |
| [[ $OSTYPE == linux* ]] &&
 | |
| (( $+commands[nisdomainname] || $+commands[ypdomainname] )) &&
 | |
| variant+=-net-tools
 | |
| 
 | |
| case $variant in
 | |
|   *-net-tools)
 | |
|     aopts=( )
 | |
|     args=(
 | |
|       '(: * -)'{-h,--help}'[display help information]'
 | |
|       '(: * -)'{-V,--version}'[display version information]'
 | |
|       + '(g)' # Get
 | |
|       '(: gs s)'{-A,--all-fqdns}'[display FQDNs resolved from network interface addresses]'
 | |
|       '(: gs s)'{-d,--domain}'[display DNS domain only]'
 | |
|       '(: gs s)'{-f,--fqdn,--long}'[display host name with DNS domain (FQDN)]'
 | |
|       '(: gs s)'{-i,--ip-address}'[display IP addresses for host (via DNS resolution)]'
 | |
|       '(: gs s)'{-I,--all-ip-addresses}'[display IP addresses for host (via network interfaces)]'
 | |
|       '(: gs s)'{-s,--short}'[display short host name only]'
 | |
|       + '(gs)' # Get/set
 | |
|       '(g)'{-y,--yp,--nis}'[display NIS domain only]'
 | |
|       + s # Set
 | |
|       '(-b --boot g)'{-b,--boot}'[always set a host name]'
 | |
|       '(: -F --file g)'{-F+,--file=}'[read host name to set from specified file]: :_files'
 | |
|       + o
 | |
|       '(-F --file g)1: :->host-or-domain'
 | |
|     )
 | |
|   ;;
 | |
|   darwin*|dragonfly*|freebsd*|netbsd*|openbsd*)
 | |
|     args+=(
 | |
|       '(: -4 -6 -d -f)-s[display short host name only]'
 | |
|     )
 | |
|     ;| # MATCH AGAIN
 | |
|   darwin*|freebsd*)
 | |
|     args+=(
 | |
|       '(: -d -s)-f[display host name with DNS domain (FQDN)]'
 | |
|     )
 | |
|     ;| # MATCH AGAIN
 | |
|   freebsd*)
 | |
|     args+=(
 | |
|       '(: -f -s)-d[display DNS domain only]'
 | |
|     )
 | |
|     ;;
 | |
|   dragonfly*)
 | |
|     args+=(
 | |
|       '(: -6 -r)-4[use first IPv4 address on interface (with -i)]'
 | |
|       '(: -4 -r)-6[use first IPv6 address on interface (with -i)]'
 | |
|       '(: -r)-i+[retrieve host name via specified interface]: :_net_interfaces'
 | |
|       '(: -4 -6 -i)-r+[retrieve host name via specified IP address]: :_bind_addresses'
 | |
|     )
 | |
|     ;;
 | |
| esac
 | |
| 
 | |
| _arguments -s -S $aopts : $args && ret=0
 | |
| 
 | |
| [[ $state == host-or-domain ]] && {
 | |
|   [[ -prefix -* ]] ||
 | |
|   if [[ -n ${opt_args[(i)*-(-y|--yp|--nis)]} ]]; then
 | |
|     _message -e nis-domains 'NIS domain' && ret=0
 | |
|   else
 | |
|     _message -e host-names 'host name' && ret=0
 | |
|   fi
 | |
| }
 | |
| 
 | |
| return ret
 |