Advertisement
Guest User

Untitled

a guest
Nov 20th, 2017
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 0.81 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. RESULTS=$1
  4. shift
  5. MAX_PROCESSES=$1
  6. shift
  7. COMMAND=$1
  8. shift
  9. ARGUMENTS=$@
  10.  
  11. IFS=$'\n'
  12.  
  13. FILTERED_RESULTS=()
  14. for result in ${RESULTS[@]}
  15. do
  16.     [[ -z "${result//$'\n'}" ]] && continue
  17.     FILTERED_RESULTS+=($result)
  18. done
  19.  
  20. HOUSEKEEPING_FILE=/tmp/$$
  21. echo -ne > $HOUSEKEEPING_FILE
  22. i=0
  23. for result in ${FILTERED_RESULTS[@]}
  24. do
  25.     (echo work for: $result; echo $ARGUMENTS $result | xargs $COMMAND; echo 1 >> $HOUSEKEEPING_FILE) &
  26.     i=$(($i + 1))
  27.     if [ $i -eq $MAX_PROCESSES ]
  28.     then
  29.         echo "MAX PROCESSES SPAWNED"
  30.         while [ `wc -l $HOUSEKEEPING_FILE | cut -d' ' -f1` -lt $MAX_PROCESSES ]
  31.         do
  32.             echo "WAITING FOR PROCESS SLOT"
  33.             sleep 1
  34.         done
  35.         echo -ne > $HOUSEKEEPING_FILE
  36.         i=0
  37.     fi
  38. done
  39.  
  40. while [ `wc -l $HOUSEKEEPING_FILE | cut -d' ' -f1` -lt $i ]
  41. do
  42.     sleep 1
  43. done
  44.  
  45. rm $HOUSEKEEPING_FILE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement