Использование массивов оболочки для параллельного чтения каждых N строк файла

Вы правильно настроили конфигурацию, чтобы запретить вход в систему root.

Похоже, вам нужно установить права доступа к файлу authorized_keysадминистратора на 600.

-1
22.03.2021, 17:19
1 ответ

не использует массивы, но хранит счетчик, чтобы определить, когда ждать.

count=0
while read -r line; do
    dosomething "$line" &
    ((++count % 35 == 0)) && wait
done < file

Кстати, вам не нравится переменная y?

Одна большая проблема с вашим кодом :вы должны успешно прочитать все 35 строк до dosomethingс ними. во время обработки файла предположим, что вы читаете aи b, но нажимаете EOF при попытке чтенияc--readвозвращает не -ноль, условие while не выполняется, и цикл прерывается без обработки $aи $b.


С массивом, не проще:

mapfile -t lines < file
len=${#lines[@]}
i=0
while ((i < len)); do
    for _ in {1..35}; do
        dosomething "${lines[i]}" &
        ((i++))
        ((i == len)) && break
    done
    wait
done
1
28.04.2021, 22:57

Теги

Похожие вопросы