aboutsummaryrefslogtreecommitdiffstats
path: root/pars.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pars.sh')
-rw-r--r--pars.sh30
1 files changed, 23 insertions, 7 deletions
diff --git a/pars.sh b/pars.sh
index 4e3544e..819153b 100644
--- a/pars.sh
+++ b/pars.sh
@@ -1,6 +1,8 @@
#!/bin/bash
parssh () {
+ local origopts=$-
+ set -m
while [[ "$1" == -* ]]; do
case ${1#-} in
[0-9]*)
@@ -10,29 +12,43 @@ parssh () {
}
;;
fo|fouter)
- [[ -f "$2" ]] || {
- echo "'$2': invalid file name"
+ [[ -r "$2" ]] || {
+ echo "'$2': invalid file name or permissions issue"
return 99
}
local parssh_fouter="$2"
shift
shift
;;
+ fi|finner)
+ [[ -r "$2" ]] || {
+ echo "'$2': invalid file name or permissions issue"
+ return 98
+ }
+ local parssh_finner="$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 "$@" &
+ sleep 1
+ done
+ if [[ -z "$parssh_finner" ]]; then
+ ssh -no StrictHostKeyChecking=no $host "$@" &
+ else
+ ssh -To StrictHostKeyChecking=no $host "$@" < "$parssh_finner" &
+ fi
done <&9
+ wait
exec 9>&-
+ [[ "${origopts//[^m]/}" == "m" ]] || set +m
}