Можно ли просмотреть «источник» для функции ksh? - PullRequest
8 голосов
/ 08 апреля 2010

Наша среда 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 +» - похоже, это довольно старая версия, поэтому может не иметь исправлений, упомянутых Жилем ниже

Спасибо, Стив

Ответы [ 2 ]

4 голосов
/ 08 апреля 2010

Чтобы увидеть источник данной функции, используйте typeset -f <function-name>, например:

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

Вы также можете использовать typeset -f, чтобы увидеть все функции и их источник.

2 голосов
/ 29 июля 2010

Вопрос не затрагивает версию ksh, но предлагает более старую версию, которая может иметь ошибку или ограничение.Вот соответствующие выдержки из журнала изменений ksh93:

08-01-31 --- Выпуск ksh93s + ---
07-11-01 Ошибка, при которой typeset -f fun не отображаласьопределение функции при вызове в подоболочке было исправлено.

03-03-18 --- Release ksh93o ---
03-02-28 Все определения функций могут отображаться с помощью typeset -f notтолько те, которые хранятся в файле истории.Кроме того, typeset + f отображает имя функции, за которым следует комментарий, содержащий номер строки и путь к файлу, который определил эту функцию.

...