время выполнения команды источника

Это вопрос?

$ echo randomcollege-nt\user90| sed -e s,randomcollege-nt\,,
user90

, если строка random college-nt не постоянна, используйте команду awk выше / ниже.

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

6 ответов

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 или что-то, чтобы получить индивидуальные тайминги: [!d7 ]

awk 'NR != 1 {print $0 - prev} {prev = $0; getline}' times
1
ответ дан 22 May 2018 в 15:18
  • 1
    спасибо @muru. Это, безусловно, может помочь в моих попытках улучшить время запуска, поэтому спасибо за это. Я не смогу оставить опцию sub-shell на месте, так как я определяю псевдонимы и функции. Но первый вариант работает по внешнему виду. – Andrew Matthews 26 January 2018 в 15:57

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
ответ дан 17 July 2018 в 22:11

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
ответ дан 23 July 2018 в 22:50

Я посмотрел на команду 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
ответ дан 22 May 2018 в 15:18

Я посмотрел на команду 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
ответ дан 17 July 2018 в 22:11

Я посмотрел на команду 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
ответ дан 23 July 2018 в 22:50

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

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