2012-01-17 2 views
3

Этот ответ, «How to profile a bash shell script?», кажется, почти полностью охватывает то, что я пытаюсь выполнить здесь. В настоящее время у меня есть некоторые zsh-скрипты, которые изменяют подсказку, однако я думаю, что некоторые обновления для oh-my-zsh вызвали некоторые проблемы, которые мне нужно выследить. Медлительность время от времени невыносима.Сценарий ZSH и подсказка профилирования?

С этой целью, как бы вы адаптировали разделы подсказок в этом примере, ответьте на работу с zsh vs 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. Я мог бы добавить соответствующий код к приглашению, я полагаю, или я открыт для других предложений.

+0

пожалуйста, рассмотрите редактирование поста, чтобы включить «в быстрых секции в этом примере ответ», релевантные, и указать, где она не работает для вас сейчас. Удачи. – shellter

+0

По сути, мне просто нужны эти переводимые в zsh эквивалентности, чтобы добавить мое приглашение после того, как я буду отслеживать настройку. : D Я не настраивал его примерно на год, поэтому мне нужно откопать раздел, где я похоронил его в настройках oh-my-zsh. – ylluminate

ответ

2

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

setopt prompt_subst 

, если это не уже.

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

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. 
2

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

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

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

войти временные метки с меньшими накладными расходами (до миллисекунды точности).

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