Установка вывода команды составляет 573 МБ

Я принимал изменения в ~ / .bashrc и ресурсы его десятки раз с . ~ / .bashrc сегодня утром. В последний раз я заметил, что он принимал около 30 секунд для источника файла.

Итак, я сделал быстрый тест:

$ time set | wc
   2925   16529 572654385

real    0m8.466s
user    0m7.855s
sys     0m1.166s

, как видно, есть около 573 МБ набора . Сброс на экран, я заметил, что большинство персонажей \ . Итак, я посчитал возникновение, которое составляет 395 миллионов раз:

$ time fgrep -o '\' <<< $(set) | wc -l
395355002

real    0m57.086s
user    0m54.015s
sys     0m4.859s

любые подсказки на том, как начать сужение по причине в ~ / .bashrc ?

Это 626 строк длиной и слишком долго для кого-то, чтобы просеять через. Я искал set -x и набор + x , но эти строки не встречаются нигде.

Примечание: , когда вы открываете новый терминал намного меньше:

$ time set | wc
   2915    9330  114104

real    0m0.010s
user    0m0.011s
sys     0m0.007s
1
задан 3 March 2021 в 22:20

1 ответ

I found the culprit. Вывод из declare -p записывался в массив командой:

mapfile -t SaveVars <<< "$(declare -p)"

Каждый раз, когда на ~/.bashrc выделялись ресурсы, массив увеличивался в два раза, также как и содержимое declare -p. В настоящее время более 1.1 Гб:

$ declare -p | wc
    123    8179 1,103,480,262

ПРИМЕЧАНИЕ: Добавлены запятые (,) для удобочитаемости.

Вставка одной строки для опустошения массива (и, конечно, соответствующей строки комментария) приводит к тому, что:

# Empty array to prevent doubling everytime ~/.bashrc is resourced
SaveVars=()
# Save variable list before user creates new ones in shell
mapfile -t SaveVars <<< "$(declare -p)"

После этого исправления размер переменных остается неизменным после выделения:

$ declare -p | wc
    120    1008   30529

$ . ~/.bashrc

$ declare -p | wc
    120    1008   30529

1
ответ дан 18 March 2021 в 23:29

Другие вопросы по тегам:

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