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

时间:2010-04-08 13:11:31

标签: linux unix function ksh

我们的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提到的修复

谢谢, 史蒂夫

2 个答案:

答案 0 :(得分:4)

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

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

您还可以使用裸typeset -f查看所有功能及其来源。

答案 1 :(得分:2)

问题没有提到ksh的版本,但暗示了可能有错误或限制的旧版本。以下是ksh93更改日志的相关摘录:

  

08-01-31 ---释放ksh93s + ---
  07-11-01排版-f fun未显示函数定义的错误             在子shell中调用时已经修复。

     

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