Скрипт ZSH и быстрое профилирование?

Этот ответ "Как профилировать сценарий оболочки bash?", кажется, почти полностью описывает то, что я пытаюсь выполнить. здесь. В настоящее время у меня есть несколько сценариев zsh, которые изменяют приглашение, однако я думаю, что некоторые обновления oh-my-zsh вызвали некоторые проблемы, которые мне нужно выследить. Вялость время от времени невыносимая.

С этой целью, как бы вы адаптировали разделы подсказок в этом примере ответа для работы с zsh и bash?

В настоящее время я модифицировал /etc/zshenv таким образом, чтобы он имел первоначальный предложенный код из примера:

PS4='+ $(date "+%s.%N")\011 '
exec 3>&2 2>/tmp/bashstart.$$.log
set -x

И у моего ~/.zshrc к хвосту добавлено следующее:

set +x
exec 2>&3 3>&-

Конечно, они не подходят для настройки оболочки ZSH. В моем коде рендеринга подсказок используются настройки oh-my-zsh. Я мог бы добавить соответствующий код к подсказке, я полагаю, или я открыт для других предложений.


person ylluminate    schedule 17.01.2012    source источник
comment
рассмотрите возможность редактирования своего сообщения, чтобы включить «разделы подсказок в этом примере ответа», которые вы считаете актуальными, и указать, где это не работает для вас сейчас. Удачи.   -  person shellter    schedule 17.01.2012
comment
По сути, мне просто нужно, чтобы они были переведены в эквиваленты zsh, чтобы добавить мое приглашение, когда я найду настройку. :D Я не настраивал его около года, поэтому мне пришлось копаться в разделе, где я закопал его в настройках oh-my-zsh.   -  person ylluminate    schedule 17.01.2012


Ответы (2)


Вызов date для каждой команды приведет к разветвлению и выполнению, что добавляет накладные расходы, которые могут помешать вашим измерениям.

Вместо этого вы можете использовать

PS4=$'+ %D{%s.%6.}\011 '

для регистрации временных меток с меньшими затратами (с точностью до миллисекунды).

Некоторые примечания по обработке полученных журналов см. на странице http://blog.xebia.com/profiling-zsh-shell-scripts/

person Arnout Engelen    schedule 09.01.2016

Вам может понадобиться сделать

setopt prompt_subst

если это еще не так.

Кроме того, чтобы интерпретировать восьмеричное escape-последовательность для табуляции, используйте $'':

PS4=$'+ $(date "+%s.%N")\011 '

Вы также можете найти некоторые из этих побегов полезными:

   %?     The return status of the last command executed just before the prompt.

   %_     The  status  of  the parser, i.e. the shell constructs (like `if' and `for') that have been started on the command
          line. If given an integer number that many strings will be printed; zero or negative or no integer means print  as
          many  as  there  are.   This  is  most useful in prompts PS2 for continuation lines and PS4 for debugging with the
          XTRACE option; in the latter case it will also work non-interactively.

   %i     The line number currently being executed in the script, sourced file, or shell function given by %N.  This is most
          useful for debugging as part of $PS4.

   %I     The line number currently being executed in the file %x.  This is similar to %i, but the line number is  always  a
          line number in the file where the code was defined, even if the code is a shell function.

   %L     The current value of $SHLVL.

   %N     The  name  of  the  script, sourced file, or shell function that zsh is currently executing, whichever was started
          most recently.  If there is none, this is equivalent to the parameter $0.  An integer may follow the `%' to  spec‐
          ify  a number of trailing path components to show; zero means the full path.  A negative integer specifies leading
          components.

   %x     The name of the file containing the source code currently being executed.  This behaves as %N except that function
          and eval command names are not shown, instead the file where they were defined.
person Dennis Williamson    schedule 18.01.2012