我试图在函数内部的.zshrc中添加分析:
# via http://stackoverflow.com/a/4351664/329700
profile_startup() {
PS4='+$(/usr/local/bin/gdate "+%s:%N") %N:%i> '
echo "profiling away"
typeset -g PS4='%D{%.} %N:%i> '
exec 3>&2 2>$HOME/tmp/startlog.$$
setopt xtrace prompt_subst
}
profile_startup
当我这样运行时,/ tmp / startlog为空(没有记录任何内容)。但是当我在一个函数之外运行它时,在裸zshrc:
PS4='+$(/usr/local/bin/gdate "+%s:%N") %N:%i> '
echo "profiling away"
typeset -g PS4='%D{%.} %N:%i> '
exec 3>&2 2>$HOME/tmp/startlog.$$
setopt xtrace prompt_subst
这会在日志中添加大量分析数据。
为什么在运行函数内部的命令时没有记录任何日志数据? setopt命令不粘吗?我尝试将setopt no_local_options
添加到profile_startup
命令的末尾,然后只有一个日志命令写入文件 - 添加setopt no_local_options
的行。
答案 0 :(得分:1)
LOCAL_OPTIONS <K>
如果在shell函数的返回点设置了此选项,则会恢复在进入函数时生效的大多数选项(包括此选项);未还原的选项为
PRIVILEGED
和RESTRICTED
。 否则,只会恢复此选项,并恢复LOCAL_LOOPS
,XTRACE
和PRINT_EXIT_VALUE
选项。
有clever way to work around this:
profile_startup() {
# do whatever ...
trap 'setopt xtrace' EXIT
}