2010-04-08 31 views
5

我們的ksh環境定義了幾個函數。可以使用typeset -f ksh命令(或functions別名)列出這些函數的名稱。是否有可能看到這些函數的定義(即源代碼)?是否可以查看ksh函數的「源」?

這似乎是一個明顯的問題,但我已嘗試所有方式的參數typeset -f沒有運氣。

作爲一個例子(在Linux):

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

對於一些(但不是全部)通過默認在環境中定義的其他功能,typeset -f確實顯示源。

更新1:這是與Linux內核發生2.4.21-32

更新2:更新2:按Ctrl-V提供了 「版本中號1993年12月28日N +」 - 看起來這是很老版本,所以可能沒有被吉爾mentionned的修復之下

謝謝你,史蒂夫

+1

'函數'會列出源碼,至少我試過了我的ksh版本 – ghostdog74 2010-04-08 13:20:02

+0

看來,在Linux上,「函數」命令顯示了一些函數的源代碼,但並非全部。在Solaris上它只顯示功能名稱的列表。 – stevec 2010-04-08 13:40:46

+0

和ksh的版本?不妨也包括髮行版本及其版本。 – 2010-04-22 16:20:44

回答

2

這個問題沒有提到ksh的版本,而是提出了一個可能有錯誤或限制的舊版本。下面是從ksh93的更新日誌相關的提取物:

31年8月1日---釋放ksh93s + ---
01年7月11日在排版-f樂趣並沒有顯示函數定義中的bug 當在子外殼中調用時已經修復。

18年3月3日---釋放ksh93o ---
28年3月2日的所有功能定義可以排版顯示-f不 只是那些存儲在歷史文件。另外,排版+ f 顯示函數名稱,後面跟着包含 行號的註釋以及定義此函數的文件的路徑名稱。

+0

感謝編輯的問題。史蒂夫 – stevec 2010-08-31 16:30:15

2

要查看一個給定函數的源代碼,使用typeset -f <function-name>,例如:

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

您也可以使用裸露的typeset -f來查看所有功能及其來源。

+0

謝謝 - 我沒有意識到'functions'只是'typeset -f'的別名 - 我已經更新了上面的問題。 – stevec 2010-04-08 15:41:50

+0

這是一個奇怪的。什麼版本的linux&ksh?不顯示的功能有什麼共同點? – pra 2010-04-08 16:18:22

+0

2.4.21-32(我也更新了上面的原始問題) – stevec 2010-04-21 15:42:48

相關問題