Advertisement
phr3ncj

eseguitutto.sh

Mar 27th, 2012
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.82 KB | None | 0 0
  1. #Esercizio 2 Script bash o Python: (10 punti):
  2. #Scrivere uno script bash o un programma python lanciatutto che esegua in modo concorrente tutti i file
  3. #“eseguibili” della directory corrente passando ad ognuno gli stessi parametri (quelli usati nell'invocazione di
  4. #lanciatutto).
  5. #NB: eseguibili=che possono essere eseguiti, script o binari
  6. #modo concorrente=il programma attiva tutti un processo per ogni file eseguibile (senza aspettare che termini il
  7. #precedente per lanciare il successivo).
  8. #Il programma deve terminare quando tutti i processi attivati sono terminati.
  9.  
  10. #!/bin/bash
  11.  
  12. dir=${1:-"."}
  13.  
  14. stampa() {
  15.         echo -e "$1 \n"
  16. }
  17.  
  18. eseguidir() {
  19.         pushd $1 > /dev/null
  20.         for i in `ls`; do
  21.                 if [[ -f $i ]]; then
  22.                         fl=`head -n 1 $i`
  23.                         stampa "TROVATO FILE `file $i`"
  24.                         if [[ ${fl:0:2} == "#!" ]]; then
  25.                                 stampa "eseguo: ${fl:2} $i &"
  26.                                 ${fl:2} $i &
  27.                         elif [[ ${i##*.} == "c" ]]; then
  28.                                 fn=${i%.*}
  29.                                 stampa "eseguo: gcc -o ${fn} $i && chmod +x ${fn} && ./${fn} &"
  30.                                 gcc -o ${fn} $i && chmod +x ${fn} && ./${fn} &
  31.                         elif [[ `file $i` == *"ELF"*"executable"* ]]; then
  32.                                 stampa "eseguo: chmod +x $i && ./$i &"
  33.                                 chmod +x $i && ./$i &
  34.                         fi
  35.                 elif [[ $i != "." ]] && [[ $i != ".." ]]; then
  36.                         stampa "TROVATA DIRECTORY: $i"
  37.                         eseguidir $i &
  38.                 fi
  39.         done
  40.         for pid in `jobs -p`; do
  41.                 wait $pid
  42.         done
  43.         popd > /dev/null
  44. }
  45.  
  46. eseguidir ${dir}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement