#!/usr/bin/env bash # # Wait until a given host is online (determined by ping) then execute the # given command # # This script is based on the original work by Steve Kemp. # Original work Copyright (c) 2013 by Steve Kemp. # # The code in the original repository may be modified and distributed under your choice of: # * The Perl Artistic License (http://dev.perl.org/licenses/artistic.html) or # * The GNU General Public License, version 2 or later (http://www.gnu.org/licenses/gpl2.txt). # # Modifications and enhancements by Ismo Vuorinen on 2025. # # Usage: # ./when-up HOST COMMAND... # # Example # ./when-up 1.2.3.4 ssh 1.2.3.4 # # Special case: # when using when-up to ssh to a host, this host does not need to be given twice # ./when-up ssh 1.2.3.4 # # Ensure we received the correct number of arguments. if [ "$#" -lt 2 ]; then echo "Usage: $0 HOST COMMAND..." exit 1 fi get_host() { if [ "$1" = "ssh" ]; then echo "$2" else echo "$1" fi } wait_for_host() { local host=$1 echo "Waiting for $host to come online..." while ! ping -c 1 -W 1 "$host" > /dev/null 2>&1; do sleep 1 done } main() { local host host=$(get_host "$@") wait_for_host "$host" if [ "$1" = "ssh" ]; then shift 1 else shift fi "$@" } main "$@"