2017-09-04 4 views
1

Ich habe Probleme mit der Iteration durch mein Skript in meinem Index. Das Problem scheint zu sein, dass man es ausführt, es iteriert nur über den ersten Index meiner $ @ -Liste. Ich denke, es stoppt und wartet auf eine Änderung, bevor es mit der nächsten Datei fortfährt. Der Punkt meines Indexes ist es, mehrere Dateien gleichzeitig mit meinem "single file script" zu durchsuchen. Wenn ich meine Datei ändere, geht es weiter zum nächsten Index, aber nicht, wenn ich es lasse. Ich hoffe, ich habe mich klar ausgedrückt. Vielen Dank!bash-looping durch Dateiargumente mit Subshell

Script 1:

#!/bin/bash 

timestamp() { 
    date +"%T" 
} 

FILE=$1 
timeer=$(stat -f "%Sm" $FILE) 
myDate=$(date +%b" "%d" "%H:%M:%S" "%Y) 
    if [ -f $FILE ]; then 
     timestamp 
     echo "Filen{$FILE} ble opprettet" 
    fi 
while : 
do 
    Atimeer=$(stat -f "%Sm" $FILE) 

     if [[ "$Atimeer" != "$timeer" && -f $FILE ]]; then 
      timestamp 
      echo "Filen ble endret!!!" 
      exit 130 
    fi 

    if [ ! -f "$FILE" ]; then 
    echo "Filen {$FILE} ble slettet.." 
    exit 130 
    fi 
done 

Skript 2:

#!/bin/bash 

if [ $# -lt 1 ]; then 
    echo "Not enough arguments, Call this script with" 
    echo "Write: ${0} <file.name>" 
    exit 1 
fi 

while : 
do 

    for i in "${@}" 
    do 
    echo $i 
    sh filkontroll.sh "$i" 
    done 

sleep 3 

done 

Antwort

0

Im Allgemeinen ein Shell-Skript wartet für jeden Befehl, bevor sie zu dem nächsten zu beenden. Das ist, was in Ihrem script2 passiert es trifft

sh filkontroll.sh "$i" 

und wartet, dass, bevor sie zu beenden.

Wenn Sie mehrere in die gleichzeitig laufen Sie, indem Sie & am Ende der Zeile wie

sh filkontroll.sh "$i" & 

oder prüfen, ein Werkzeug zu tun Parallelisierung wie GNU Parallelen den Befehl in den Hintergrund sollte

+0

BTW läuft es für immer im Hintergrund? Denn mein Mac läuft momentan sehr intensiv. Ich lief "top" im Terminal und ich sah vier Sh-Prozesse gehen, auch nachdem ich das Skript beendet habe? – ruubel

+0

@ruubel es wird im Hintergrund laufen, bis es entweder natürlich oder getötet wird beendet. In deinem Skript könntest du eine Menge davon bekommen, da du sie alle startest, warte 3 Sekunden, dann starte sie alle wieder und mache es kontinuierlich Wenn es länger als 3 Sekunden dauert, bis einer von ihnen fertig ist, wirst du mehr und mehr bekommen bis das System einfach nicht mehr mithalten kann –

+0

Ooh ich bekomme es! Nein, ich habe es auf 60 Sekunden geändert. Kann ich einen Kill-Schalter im Skript verwenden oder wie soll ich sie abbrechen, wenn ich fertig bin? – ruubel

Verwandte Themen