Я пытаюсь улучшить выполнение своего zsh dotfiles, и мне нужно ко времени выполнение мои нижние индексы. У меня есть раздел кода в моем .zshrc
сходство с этим:
typeset -U config_files
config_files=($DOTFILES/**/*.zsh)
for file in ${(M)config_files}
do
source file
done
То, что я хотел бы сделать, является чем-то вроде этого:
for file in ${(M)config_files}
do
\time -f %E source file
done
Но к сожалению, я получаю этот вид ответа:
time: cannot run source: No such file or directory
Где я иду не так, как надо?
source
встроенное, не внешняя команда, таким образом с помощью внешнего time
ко времени это не имеет смысла. Сделайте любой из:
TIMEFMT=%E
for file in ${(M)config_files}
do
time (source file)
done
Или:
for file in ${(M)config_files}
do
\time -f %E zsh -c 'source "$1"' zsh "$file"
done
В первом подоболочка необходима потому что:
Дополнительное примечание: встроенное время относилось к любой конструкции, которая выполняется в текущей оболочке, тихо проигнорирован. Таким образом, хотя нормально синтаксически помещать изогнутое открытие или повторный цикл и т.п. сразу после ключевого слова времени, Вы не получите статистики синхронизации. Необходимо использовать parens вместо этого, для принуждения подоболочки, которая затем синхронизирована.
И в последнем случае, Вы запускаете новый zsh экземпляр для каждого файла. Так, в обоих случаях нет никакого пути к тому, чтобы легко синхронизировать зависимые сценарии (т.е. где один файл конфигурации делает что-то, что требуется или так или иначе влияет на другой файл конфигурации). Поочередно, можно сохранить вывод time
после каждого источника, который даст Вам кумулятивную синхронизацию:
TIMEFMT=%E
{time} 2> times
for file in ${(M)config_files}
do
source file
{time} 2>> times
done
Затем можно использовать awk
или что-то для получения отдельных синхронизаций:
awk 'NR != 1 {print $0 - prev} {prev = $0; getline}' times
Я смотрел на man time
управляйте и отметил
Users of the bash shell need to use an explicit path in order to run
the external time command and not the shell builtin variant. On system
where time is installed in /usr/bin, the first example would become
таким образом, я предполагаю, что необходимо обеспечить путь в течение времени. Обратите внимание, что у меня нет опыта в zsh