mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-26 11:14:08 +00:00
69 lines
1.3 KiB
Bash
Executable File
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 "$@"
|