aboutsummaryrefslogtreecommitdiffstats
path: root/pars.sh
blob: 4e3544ed760d0c31a5a3f606c9e0e39cd677e11e (plain)
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
36
37
38
#!/bin/bash

parssh () {
    while [[ "$1" == -* ]]; do
        case ${1#-} in
            [0-9]*)
                [[ "${1#-}" != *[^0-9]* ]] && {
                    local parssh_concurrency=${1#-}
                    shift
                }
            ;;
            fo|fouter)
                [[ -f "$2" ]] || {
                    echo "'$2': invalid file name"
                    return 99
                }
                local parssh_fouter="$2"
                shift
                shift
            ;;
        esac
    done

    [[ -z "$parssh_fouter" ]] && {
        exec 9<&0
    } || {
        echo "reading $parssh_fouter"
        exec 9<"$parssh_fouter"
    }
                
    while read host; do
        while (( $(jobs -pr | wc -l) >= ${parssh_concurrency:-4} )); do
            sleep 1;
        done;
        ssh -no StrictHostKeyChecking=no $host "$@" &
    done <&9
    exec 9>&-
}