Наша 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 ниже
Спасибо, Steve
В вопросе не упоминается версия ksh, но предполагается более старая версия, которая может иметь ошибку или ограничение. Вот соответствующие выдержки из журнала изменений ksh93:
08-01-31 --- Выпуск ksh93s+ ---
07-11-01 Ошибка, при которой typeset -f fun не отображал определение функции при вызове во вложенной оболочке, была исправлена.03-03-18 --- Выпуск ksh93o ---
03-02-28 Все определения функций могут быть отображены с помощью typeset -f, а не только те, которые хранятся в файле истории. Кроме того, typeset +f отображает имя функции, за которым следует комментарий, содержащий номер строки и имя пути к файлу, в котором определена эта функция.
Чтобы увидеть источник данной функции, используйте typeset -f <имя функции>
, например:
$ foo
foo
$ typeset -f foo
function foo
{
echo foo
}
Вы также можете использовать голый typeset -f
, чтобы увидеть все функции и их источник.