Zadanie: uruchomić w screenie n instancji programu z różnymi plikami wejściowymi. Każdy plik wejściowy ma nazwę pokroju {num}_{num}.pts
|
1 2 3 4 5 6 7 8 |
#!/bin/bash for f in *.pts; do ff=`echo $f | sed 's/_//' | sed 's/\.//' | sed 's/pts//'` ff=project$ff screen -md -S $ff screen -S $ff -p 0 -X stuff "module load deal.ii/8.2pre-gcc482 && ./Femaft $f$(printf \\r) " echo "Starting $ff calculations..."; done |
Pętla po wszystkich plikach z rozszerzeniem *.pts, pobranie ich nazwy i usuniecie extra znaków, tak by zostały tylko dwie liczby, ustalenie nazwy screena na project{numer}, indywidualna nazwa – 'project’ jest potrzebna by łatwiej zidentyfikować screeny, dodatkowo nazwa się nie może zaczynać od cyfr, bo są problemy z podłączeniem się do takowego screena bez podania PIDa. Następnie następuje odpalenie screena bez połączenia się z nim, odpalenie pliku wykonywalnego wraz z parametrem, który stanowi nazwę pliku w uprzednio stworzonym screenie i wyświetlenie jakiejś informacji kontrolnej.
Aby ubić tak utworzone screeny za jednym zamachem:
|
1 |
screen -ls | grep project | cut -d. -f1 | awk '{print $1}' | xargs kill |
Gdzie 'project’ jest jakąś wspólną nazwą screenów.
