Где скачать RPM ядра напрямую?

Вы хотите упростить код, используемый внутри рекурсивной функции.

Часть, которую вы хотите улучшить, — это захват кода выхода функции.

Следует понимать, что код возврата не единственный способ передачи информации. На самом деле, самый быстрый способ передачи информации — это переменная. В рекурсивной функции это должна быть глобальная переменная (, не определенная с помощью локальной ), чтобы родитель мог прочитать значение обратно. В этом случае строка, которая устанавливает код возврата 1, это

# return 1 (false) if $DEP_CHANGED = false && $DEP_FILE is cached
[ "$DEP_CHANGED" = false ] && (cached "$(dirname "$DEP_FILE")") && return 1

, который можно изменить на:

# Inform that data didn't change
[ "$DEP_CHANGED" = false ] && 
    (cached "$(dirname "$DEP_FILE")") && 
    dep_changed_in_function=false

И соответственно:

for DEP in "${DEP_LIST[@]}"; do
    dep_changed_in_function=true

    # find new deps
    DEP_OUT=( "$(changes "$DEP" "${DEP_OUT[*]}" "${DEP_HIERARCHY[*]}")" )
    DEP_OUT=( $(printf "%s\n" "${DEP_OUT[@]}" | sort | trim | uniq) )

    # set $DEP_CHANGED flag
    [ "$dep_changed_in_function" -eq true ] && DEP_CHANGED=true
done

Но второго вызова для обработки массива DEP_OUTможно было бы легко избежать, если выходные данные changesуже отсортированы.

Это можно легко сделать:

echo $(printf '%s\n' "${DEP_OUT[@]}" | sort | trim | uniq )

Вместо

echo "${DEP_OUT[@]}"

При этом часть кода из вашего вопроса сводится к:

for DEP in "${DEP_LIST[@]}"; do
    dep_changed_in_function=true

    DEP_OUT=( "$(changes "$DEP" "${DEP_OUT[*]}" "${DEP_HIERARCHY[*]}")" )

    # set $DEP_CHANGED flag
    DEP_CHANGED=$dep_changed_in_function
done

Конечно, dep_changed_in_function=trueможно установить в начале функции.

0
04.02.2021, 09:59
1 ответ

RPM зависят от распределения. Так, например, вы можете получить старые пакеты RPM для Fedora изhttps://archives.fedoraproject.org/pub/archive/fedora/linux/releases. Однако не все выпуски ядра будут доступны таким образом.

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

В противном случае можно использовать официальный архив с kernel.org.

1
18.03.2021, 22:32

Теги

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