是否可以查看ksh函数的“源代码”?

9

我们的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:Ctrl-V显示“Version M 1993-12-28 n+”,看起来这是一个相当旧的版本,可能没有Gilles在下面提到的修复。

谢谢, 史蒂夫


1
“functions” 将列出源代码,至少我在我的 ksh 版本上尝试过。 - ghostdog74
在Linux上,“functions”命令似乎显示了一些函数的源代码,但并非所有函数都有。而在Solaris上,它只显示函数名称列表。 - stevec
ksh的版本是多少?最好也包括发行版及其版本。 - Dennis Williamson
2个回答

6
要查看给定函数的源代码,请使用typeset -f <function-name>,例如:
$ foo
foo
$ typeset -f foo
function foo
{
    echo foo
}

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

1
谢谢 - 我之前没有意识到 functions 只是 typeset -f 的别名 - 我已经更新了上面的问题。 - stevec
这是一个奇怪的问题。使用的是哪个版本的Linux和ksh?那些不显示的函数有什么共同点吗? - pra

3
这个问题没有提到ksh的版本,但暗示了可能存在错误或限制的旧版。以下是ksh93版本更改日志中相关的节选:
08-01-31 --- 发布 ksh93s+ --- 07-11-01 修复了一个错误,当在子shell中调用typeset -f fun时未显示函数定义。
03-03-18 --- 发布 ksh93o --- 03-02-28 现在可以使用typeset -f显示所有函数定义,而不仅仅是存储在历史文件中的函数。此外,typeset +f显示函数名,后跟包含定义该函数的文件的行号和路径名的注释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接