【问题标题】:Is it possible to view the "source" for a ksh function?是否可以查看 ksh 函数的“源”?
【发布时间】:2011-02-05 16:50:17
【问题描述】:

我们的 ksh 环境定义了几个函数。这些函数的名称可以使用typeset -f ksh 命令(或functions 别名)列出。是否可以看到这些函数的定义(即源代码)?

这似乎是一个显而易见的问题,但我已经尝试了typeset -f 的各种参数,但没有成功。

作为一个例子(在 Linux 上):

$ foo()
> {
>  echo foo
> }
$ foo
foo
$ typeset -f foo
foo
$

对于环境中默认定义的一些(但不是全部)其他函数,typeset -f确实显示源代码。

更新 1:Linux 内核 2.4.21-32 会发生这种情况

更新 2:更新 2:Ctrl-V 给出“版本 M 1993-12-28 n+” - 看起来这是一个相当旧的版本,所以可能没有下面 Gilles 提到的修复

谢谢, 史蒂夫

【问题讨论】:

  • functions 将列出来源,至少我在我的 ksh 版本上尝试过
  • 似乎在 Linux 上,“functions”命令显示了一些函数的来源,但不是全部。在 Solaris 上,它只显示函数名称列表。
  • 还有ksh的版本?也可以包括发行版及其版本。

标签: linux unix function ksh


【解决方案1】:

要查看给定函数的来源,请使用typeset -f <function-name>,例如:

$ foo
foo
$ typeset -f foo
function foo
{
    echo foo
}

您也可以使用裸typeset -f 查看所有函数及其来源。

【讨论】:

  • 谢谢 - 我没有意识到 functions 只是 typeset -f 的别名 - 我已经更新了上面的问题。
  • 这很奇怪。什么版本的linux和ksh?不显示的功能有什么共同点吗?
【解决方案2】:

这个问题没有提到 ksh 的版本,而是建议一个可能有错误或限制的旧版本。以下是 ksh93 变更日志的相关摘录:

08-01-31 --- 发布 ksh93s+ ---
07-11-01 typeset -f fun 不显示函数定义的bug 在子 shell 中调用时已修复。

03-03-18 --- 发布 ksh93o ---
03-02-28 所有函数定义都可以用 typeset -f not 显示 只是那些存储在历史文件中的。另外,排版+f 显示函数名称,后跟包含 定义此函数的文件的行号和路径名。

【讨论】:

    猜你喜欢
    • 2015-01-23
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多