Подтвердить что ты не робот

ZSH: Как сделать блок кода?

В bash я могу написать script, который содержит что-то вроде этого:

{ time {

#series of commands
echo "something"
echo "another command"
echo "blah blah blah"

} } 2> $LOGFILE

В ZSH эквивалентный код не работает, и я не могу понять, как заставить его работать для меня. Этот код работает, но я точно не знаю, как заставить его обернуть несколько команд.

{ time echo "something" } 2>&1

Я знаю, что могу создать новый script и поместить туда команды, а затем выполнить его правильно, но есть ли способ сделать это либо с помощью функций, либо с помощью аналогичного метода с bash выше?

4b9b3361

Ответ 1

Попробуйте вместо этого:

{ time ( echo hello ; sleep 10s;  echo hola ; ) } 2>&1 

Ответ 2

Если вы хотите просмотреть свой код, у вас есть несколько альтернатив:

  • Выполнение времени подоболочки как:

    time ( commands ... )

  • Используйте REPORTTIME для проверки медленных команд:

    export REPORTTIME=3 # display commands with execution time >= 3 seconds

  • setop xtrace, как описано здесь

  • Модуль zprof

Ответ 3

Попробуйте заменить {с помощью (? Я думаю, что это должно помочь

Ответ 4

Вы также можете использовать встроенную оболочку times POSIX в сочетании с функциями. Он будет сообщать пользователю и системному времени, используемому оболочкой и ее дочерними элементами. Видеть http://pubs.opengroup.org/onlinepubs/009695399/utilities/times.html

Пример:

somefunc() {
    code you want to time here
    times
}

Причина использования функции оболочки заключается в том, что она создает новый контекст оболочки, в начале которого times - все нули (попробуйте). В противном случае результат также содержит вклад текущей оболочки. Если это то, что вы хотите, забудьте о функции и поместите times последним в свой script.