是否可以查看ksh函数的"来源"?

ste*_*vec 8 unix linux ksh function

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

这似乎是一个显而易见的问题,但我已经尝试了所有方式的参数typeset -f,没有运气.

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

$ foo()
> {
>  echo foo
> }
$ foo
foo
$ typeset -f foo
foo
$
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢,史蒂夫

pra*_*pra 5

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

$ foo
foo
$ typeset -f foo
function foo
{
    echo foo
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用一个baretypeset -f查看所有函数及其来源。


Gil*_*il' 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 显示函数名称,后跟注释,其中包含定义该函数的文件的行号和路径名。