синхронизация выполнения исходной команды

Я пытаюсь улучшить выполнение своего 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

Где я иду не так, как надо?

0
задан 26 January 2018 в 02:17

2 ответа

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
1
ответ дан 31 October 2019 в 03:22

Я смотрел на 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

0
ответ дан 31 October 2019 в 03:22

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

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