具有不同参数的多个bash脚本

时间:2017-02-06 14:51:47

标签: bash

我有以下bash脚本,我使用终端启动。

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

鉴于它需要至少一个小时来处理所有文件。 如果我在最后一个for循环中将'100'更改为'1000'并启动同一个脚本的另一个实例,会发生什么?

第一个流程是否会计入1000或将继续计为100?

2 个答案:

答案 0 :(得分:0)

我认为当bash进程执行它时,该文件将是只读的。但你可以强制改变。已经运行的进程将计入其原始值100.

您必须注意结果。您正在写入相同的输出目录,并且必须预期副作用。

答案 1 :(得分:0)

"当您对脚本进行更改时,您可以在磁盘上进行更改(硬盘 - 永久存储);当您执行脚本时,脚本将加载到您的内存(RAM)。

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

但是"您会注意到文件正在以8KB的增量读入,因此Bash和其他shell可能不会完整地加载文件,而是以块为单位读取它们。&# 34;

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

因此,在您的情况下,脚本解释器将所有脚本加载到RAM内存中,然后执行。这意味着如果你改变了值,然后再次执行它,第一个实例仍然会有" old"值。