Files
dotfiles/local/bin/x-when-up

69 lines
1.3 KiB
Bash
Executable File

#!/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 "$@"