2017-02-06 3 views
-1

Ich habe das folgende Bash-Skript, das ich mit dem Terminal starten.Multiple Bash-Skript mit verschiedenen Parametern

dataset_dir='/home/super/datasets/Carpets_identification/data' 
dest_dir='/home/super/datasets/Carpets_identification/augmented-data' 

# if dest_dir does not exist -> create it 
if [ ! -d ${dest_dir} ]; then 
    mkdir ${dest_dir} 
fi 

# for all folder of the dataset 
for folder in ${dataset_dir}/*; do 

     curr_folder="${folder##*/}" 
    echo "Processing $curr_folder category" 

    # get all files 
    for item in ${folder}/*; do 


     # if the class dir in dest_dir does not exist -> create it 
     if [ ! -d ${dest_dir}/${curr_folder} ]; then 
      mkdir ${dest_dir}/${curr_folder} 
     fi 

     # for each file 
     if [ -f ${item} ]; then 
#   echo ${item} 
      filename=$(basename "$item") 
      extension="${filename##*.}" 
      filename=`readlink -e ${item}` 

      # get a certain number of patches 
      for i in {1..100} 
       do 
        python cropper.py ${filename} ${i} ${dest_dir} 
       done 
     fi 
    done 
done 

Vorausgesetzt, dass es mindestens eine Stunde benötigt, um alle Dateien zu verarbeiten. Was passiert, wenn ich die '100' mit '1000' in der letzten for-Schleife ändere und eine weitere Instanz des gleichen Skripts starte?

Wird der erste Prozess auf 1000 zählen oder wird weiterhin bis 100 gezählt?

+1

Der erste wird zu 100 zählen und der zweite wird zu 1000 zählen. –

+1

Beiseite: Sie haben eine ganze Menge von Bugs, die http://shellcheck.net/ zu erfassen. –

+1

Ehrlich gesagt, das ist wirklich * wirklich * ineffizient. Es ist albern, die Python-Laufzeit in einer engen inneren Schleife von der Shell auszugehen, anstatt all deine Arbeit in einem einzigen Python-Prozess zu erledigen. –

Antwort

0

Ich denke, die Datei wird nur gelesen, wenn ein Bash-Prozess es ausführt. Aber Sie können die Änderung erzwingen. Der bereits laufende Prozess zählt auf seinen ursprünglichen Wert, 100.

Sie müssen auf die Ergebnisse achten. Sie schreiben im selben Ausgabeverzeichnis und müssen mit Nebenwirkungen rechnen.

0

„Wenn Sie Änderungen an Ihrem Skript machen, machen Sie die Änderungen auf der Festplatte (Hard Disk- die permanente Speicherung), wenn Sie das Skript ausführen, das Skript zu Ihrem Speicher (RAM) geladen wird

. (siehe https://askubuntu.com/questions/484111/can-i-modify-a-bash-script-sh-file-while-it-is-running)

ABER „Sie werden feststellen, dass die Datei in 8 KB-Schritten eingelesen wird, so Bash und anderen Shells wird wahrscheinlich nicht eine Datei vollständig geladen werden, sondern sie lesen sie in Blöcke in.“

(siehe https://unix.stackexchange.com/questions/121013/how-does-linux-deal-with-shell-scripts)

In diesem Fall wird also Ihr gesamtes Skript vom Skriptinterpreter in den RAM-Speicher geladen und dann ausgeführt. Wenn Sie den Wert ändern und dann erneut ausführen, hat die erste Instanz immer noch den "alten" Wert.

+0

ABER wenn Sie die Datei cropper.py bearbeiten, dann ist es sehr wahrscheinlich, dass die Änderung in Ihrem Python-Skript den Wert Ihres zuvor ausgeführten Bash-Skripts beeinflusst. – Cedric

Verwandte Themen