Невозможно манипулировать массивами, используя "unset" - PullRequest
0 голосов
/ 09 января 2020

У меня есть массив docker контейнеров, arr = (testfoler1 testfoler2 testfoler3 testfoler1)

я знаю, что testfoler1 имеет файл notify.txt в местоположении / tmp /, т.е. /tmp/notify.txt. testfoler2 и testfoler3, пусты.

Теперь мое требование: как только этот файл будет найден, я остановлю контейнер и удалю этот контейнер из arr.

Так что поток должен быть таким:

шаг 1 : /tmp/notify.txt находится в testfoler1, и новый массив будет иметь вид: arr = (testfoler2 testfoler3 testfoler1)

шаг 2: он будет искать testfolder2 и testfolder3, но, поскольку ни один файл не существует, никаких действий нет

шаг 3: когда он достигает testfoler1, который находится во втором индексе, он найдет файл notify.txt и должен удалить его из массива.

И мой последний ожидаемый массив будет (testfoler2 testfoler3), и l oop должен продолжать работать до тех пор, пока файл не будет найден или я не остановлю сценарий.

Мой сценарий успешно выполняется, пока не будет повторен (testfoler1 testfoler2 testfoler3) , Проблема начинается, когда мой массив становится (testfoler2 testfoler3 testfoler1). Здесь он отлично работает для testfolder2 и testfolder3, так как файл не найден, но когда он достигает testfolder1, вместо удаления testfolder1 он удаляет testfolder2, а массив становится (testfoler3 testfoler1) вместо (testfoler2 testfoler3), а затем продолжает выполнять итерацию, а затем удаляет testfolder3, а затем testfoler1.Однако он должен был удалить testfolder1, потому что он имел файл и должен был продолжать работать для testfolder2 и testfolder3.

Пожалуйста, укажите код, который я пробовал с:

FILE=/tmp/notify.txt

arr=(testfoler1 testfoler2 testfoler3 testfoler1)

sizeOfArray="${#arr[@]}"
index=0

while [ ! $sizeOfArray -eq 0 ]

do
    sizeOfArray="${#arr[@]}"
    test=`sudo docker container diff ${arr[index]}|grep $FILE|wc -l`
     if [ $test = 1 ]; then
      echo "notify.txt is found in container ${arr[index]}"  
            ##Get array length
            sizeOfArray="${#arr[@]}"
            sudo docker stop ${arr[index]}
            sudo docker container ls -a|grep ${arr[index]}

            ###################Issue seems to be here
            unset arr[${arr[index]}]
            arr=( "${arr[@]}" ) 
            ##################Need some help on code above          
            echo "When file is FOUND, name of all array elements ${arr[*]}"
            echo "Size of array after deletion *********** "${#arr[@]}""

            sizeOfArray="${#arr[@]}"
            index=$((index + 1))
            if [ $index -gt $sizeOfArray ] ; then
            index=0 
            fi
            continue
    else
        echo "notify file is not created in ${arr[index]}"
            echo "When file is NOT found, name of all array elements ${arr[*]}"
        index=$((index + 1))
        if [ $index -ge $sizeOfArray ]; then
        echo "Index value is greater/equal size of suites"
        index=0 
        fi
    fi
done

1 Ответ

1 голос
/ 09 января 2020

Это не удаляет элемент index из arr:

unset arr[${arr[index]}]

Если это то, что вы намеревались сделать, вы должны использовать:

unset arr[index]
...