ste*_*vec 8 unix linux ksh function
我们的ksh环境定义了几个函数.可以使用typeset -f
ksh命令(或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提到的修复
谢谢,史蒂夫
要查看给定函数的来源,请使用typeset -f <function-name>
,例如:
$ foo
foo
$ typeset -f foo
function foo
{
echo foo
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用一个baretypeset -f
查看所有函数及其来源。
该问题没有提及 ksh 的版本,但建议使用可能存在错误或限制的旧版本。以下是 ksh93 变更日志的相关摘录:
08-01-31 --- 发布 ksh93s+ ---
07-11-01 修复了在子 shell 中调用 typeset -f fun 时不显示函数定义的错误。03-03-18 --- 发布 ksh93o ---
03-02-28 所有函数定义都可以使用 typeset -f 显示,而不仅仅是历史文件中存储的函数定义。此外,typeset +f 显示函数名称,后跟注释,其中包含定义该函数的文件的行号和路径名。