85 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
TIMEOUT=15
 | 
						|
QUIET=0
 | 
						|
 | 
						|
echoerr() {
 | 
						|
  if [ "$QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi
 | 
						|
}
 | 
						|
 | 
						|
usage() {
 | 
						|
  exitcode="$1"
 | 
						|
  cat << USAGE >&2
 | 
						|
Usage:
 | 
						|
  $cmdname host:port [-t timeout] [-- command args]
 | 
						|
  -q | --quiet                        Do not output any status messages
 | 
						|
  -t TIMEOUT | --timeout=timeout      Timeout in seconds, zero for no timeout
 | 
						|
  -- COMMAND ARGS                     Execute command with args after the test finishes
 | 
						|
USAGE
 | 
						|
  exit "$exitcode"
 | 
						|
}
 | 
						|
 | 
						|
wait_for() {
 | 
						|
 if ! command -v nc >/dev/null; then
 | 
						|
    echoerr 'nc command is missing!'
 | 
						|
    exit 1
 | 
						|
  fi
 | 
						|
 | 
						|
  for i in `seq $TIMEOUT` ; do
 | 
						|
    nc -z "$HOST" "$PORT" > /dev/null 2>&1
 | 
						|
    
 | 
						|
    result=$?
 | 
						|
    if [ $result -eq 0 ] ; then
 | 
						|
      if [ $# -gt 0 ] ; then
 | 
						|
        exec "$@"
 | 
						|
      fi
 | 
						|
      exit 0
 | 
						|
    fi
 | 
						|
    sleep 1
 | 
						|
  done
 | 
						|
  echo "Operation timed out" >&2
 | 
						|
  exit 1
 | 
						|
}
 | 
						|
 | 
						|
while [ $# -gt 0 ]
 | 
						|
do
 | 
						|
  case "$1" in
 | 
						|
    *:* )
 | 
						|
    HOST=$(printf "%s\n" "$1"| cut -d : -f 1)
 | 
						|
    PORT=$(printf "%s\n" "$1"| cut -d : -f 2)
 | 
						|
    shift 1
 | 
						|
    ;;
 | 
						|
    -q | --quiet)
 | 
						|
    QUIET=1
 | 
						|
    shift 1
 | 
						|
    ;;
 | 
						|
    -t)
 | 
						|
    TIMEOUT="$2"
 | 
						|
    if [ "$TIMEOUT" = "" ]; then break; fi
 | 
						|
    shift 2
 | 
						|
    ;;
 | 
						|
    --timeout=*)
 | 
						|
    TIMEOUT="${1#*=}"
 | 
						|
    shift 1
 | 
						|
    ;;
 | 
						|
    --)
 | 
						|
    shift
 | 
						|
    break
 | 
						|
    ;;
 | 
						|
    --help)
 | 
						|
    usage 0
 | 
						|
    ;;
 | 
						|
    *)
 | 
						|
    echoerr "Unknown argument: $1"
 | 
						|
    usage 1
 | 
						|
    ;;
 | 
						|
  esac
 | 
						|
done
 | 
						|
 | 
						|
if [ "$HOST" = "" -o "$PORT" = "" ]; then
 | 
						|
  echoerr "Error: you need to provide a host and port to test."
 | 
						|
  usage 2
 | 
						|
fi
 | 
						|
 | 
						|
wait_for "$@"
 |