aboutsummaryrefslogtreecommitdiff
path: root/bin/shock
blob: 1e288896792ea0f3378f04f2c1009be7491ced74 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/env bash

#
# shock(1) -- Run a command on every hostname returned by shoal(1) and print
# the hostname if the command's return value was zero. Discard stdout, but do
# print stderr.
#
# Author: Tom Ryder <tom@sanctum.geek.nz>
# Copyright: 2014
# License: Public domain
#

# Name self
self=shock

# Handle ^C interrupts
trap 'trap - INT; kill -INT $$' INT

# Bail if we couldn't find shoal(1)
hash shoal || exit

# Exit with usage method if no command given
if ! (($#)) ; then
    printf 'USAGE: %s <command>\n' "$self" >&2
    exit 1
fi

# Execute command, print hostname if it returns zero
while read -r hostname ; do
    # shellcheck disable=SC2029
    if ssh -nq -- "$hostname" "$@" >/dev/null ; then
        printf '%s\n' "$hostname"
    fi
done < <(shoal)