zsh: команда `source` не перезагружает функции

find + решение GNUawk:

find. -type f -name "*.css" -exec gawk -i inplace \
'{ for (i=1; i<=NF; i++) 
       if ($i ~ /^[0-9]+\.[0-9]+rem/) { v=$i/2; sub(/^[0-9]+\.[0-9]+/, "", $i); $i=v $i } 
 }1' {} \;
6
02.01.2020, 02:47
2 ответа

Использование rc-файла редко, если вообще когда-либо, работает на практике, потому что люди редко пишут его как идемпотентный. Речь идет о вашем собственном случае, когда вы каждый раз добавляете один и тот же каталог к ​​пути fpath, что, конечно, означает, что поиск по этому пути каждый раз занимает немного больше времени. Более того, это не единственное место, где вы занимаетесь подобными вещами.

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

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

Образец .zshrcв исходном коде оболочки Z содержит функцию freload(), которая делает то же самое для всех функций, названных в качестве аргументов. Это также typeset -U path cdpath fpath manpath, заметьте.

8
28.04.2021, 23:26

Хотя autoloadпомечает nameдля автозагрузки при первой ссылке в zsh, он не переопределяет никакую существующую функцию с тем же именем, если она уже определена, поскольку это имя уже упоминалось после того, как оно было определено. чтобы достичь того, чего вы хотите, вам придется сначала отменить определение функции перед повторным поиском .zshrcили для чего-то более упорядоченного, создать функцию-оболочку для автозагрузки, чтобы проверить, определены ли уже какие-либо имена функций, и если да, отмените их определение прежде чем снова пометить их для автозагрузки.

Что касается того, почему получение вашего .zshrcстановилось медленнее после каждой попытки, на это нельзя ответить без сказанного .zshrc.

5
28.04.2021, 23:26

Теги

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