我可以找到函数定义的位置,但这不适用于别名:
$ type -a subl
subl is an alias for /Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl
subl is /Users/brandon/bin/subl
Run Code Online (Sandbox Code Playgroud)
我想知道别名是在哪里定义的,而不是它的定义是什么,或者它指向哪里。换句话说:如果我想更改它,要转到的文件和行号是什么。我已经搜索了我的和我保存它来源的文件的目录,但我什么也没找到1。如何在无需手动搜索的情况下找到它?.zshrc
1.我最终通过运行zsh -v和搜索找到了它subl,然后向上阅读,直到找到以source. 尽管如此,我希望将来能以非手动方式执行此操作。
这应该可以解决问题:
PS4='+%x:%I>' zsh -i -x -c '' |& grep subl
Run Code Online (Sandbox Code Playgroud)
这应该打印类似
+/Users/brandon/.zshrc.d/aliases.zsh:32>alias 'subl=/Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl'
Run Code Online (Sandbox Code Playgroud)
这意味着/Users/brandon/.zshrc.d/aliases.zsh在第 32 行的文件(例如)alias 'subl=/Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl'中执行了命令。请注意,显示的命令行是解析文件中写入的命令的结果,因此它们可能不相同。
zsh的配置本质上是一个 shell 命令列表。命令运行位置的信息通常仅在命令实际运行时可用。一旦命令完成,环境或外壳设置中的任何更改可能会保留,但这些更改是如何发生的信息已经消失。因此,在运行时搜索配置文件或跟踪信息是唯一的选择。
搜索配置文件 - 正如您所注意到的 - 容易出错,因为很容易忽略一些配置文件;zsh在启动交互式 shell 时直接加载多达八个不同的配置文件,并且可以从那里获取任意数量的附加文件。
这就是zsh 的 XTRACE( -x) 发挥作用的地方。类似于VERBOSE( -v)XTRACE打印执行的命令行,但它也在每行之前显示PS4提示。PS4可以配置为显示当前执行的文件和行号。(默认情况下PS4显示函数或脚本文件的名称以及当前执行的行号。因此,如果一行代码在函数内部,它不会立即显示它的定义位置。)。
详细来说,上面的命令执行以下操作:
将环境变量设置PS4为+%x:%I>(仅针对此命令)。%x由包含当前正在运行的源代码的文件的名称替换。%I是文件中该代码的行号。+并且>是装饰以区分XTRACE输出与脚本可能生成的任何输出。
注意:如果PS4在配置中的某处设置为不同的值,这可能无法正常工作。如果输出没有所需的格式,则可能需要先删除/注释掉PS4或PROMPT4设置。
zsh启动zsh
-i)XTRACE启用(-x)-c ''),此后立即退出。这意味着,只运行交互模式的初始化文件,并且没有提示生成或钩子命令的混乱。
|&是 的简写2>&1 |,它将 一个命令的标准输出和标准错误连接到下一个命令的标准输入。grep subl搜索“subl”。我建议只查找别名的名称,因为确切的命令行可能不是alias subl="..."解析造成的。(在zsh的你甚至可以定义一个别名,而无需使用alias由assoziative阵列中分配键-值对命令aliases:aliases[subl]="...")| 归档时间: |
|
| 查看次数: |
2056 次 |
| 最近记录: |