我有以下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?
答案 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"值。