zsh:是否可以跟踪命令执行期间调用的所有函数和命令以及扩展的别名?

zsh:是否可以跟踪命令执行期间调用的所有函数和命令以及扩展的别名?

我想要这样的东西:

# source:
a() b mp3 m4a "$@"
b() eval "${1}-to-${2} $@:q"
alias mp3-to-m4a='ffmpeg ...'
# 
$ traceall a a.mp3 a.m4a
 # should return:
 Functions:
 a
 b
 Aliases:
 mp3-to-m4a
 commands:
 ffmpeg

答案1

trap您可以用伪信号来查看DEBUG。不过,这只触发命令和函数,并且仅在别名扩展之后触发。您需要阅读 zsh 手册中的详细信息,因为它运行一个命令或函数,为其提供有关将要执行的内容的信息,而不是直接记录信息;您可以假设使用它来实现完整的调试器。

答案2

全局打开 xtrace:

> set -x; a a.mp3 a.m4 ; set +x

或者为函数打开 xtrace,然后执行它:

> typeset -tf a   # turns on xtrace for function a and below
> a a.mp3 a.m4

> typeset -Tf a   # turns on xtrace for function a only
> a a.mp3 a.m4

相关内容