簡體   English   中英

具有不同參數的多個bash腳本

[英]Multiple bash script with different parameters

我有以下 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?

我認為該文件在 bash 進程執行時將是只讀的。 但是您可以強制更改。 已經運行的進程將計數到其原始值 100。

你必須關心結果。 您正在同一個輸出目錄中寫入,並且必須預期副作用。

“當您對腳本進行更改時,您會在磁盤(硬盤 - 永久存儲器)上進行更改;當您執行腳本時,腳本會加載到您的內存(RAM)中。

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

但是“您會注意到文件是以 8KB 的增量讀取的,因此 Bash 和其他 shell 可能不會完全加載文件,而是分塊讀取它們。”

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

因此,在您的情況下,您的所有腳本都由腳本解釋器加載到 RAM 內存中,然后執行。 這意味着如果您更改該值,然后再次執行它,第一個實例仍將具有“舊”值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM