Получить имя функции в скрипте KornShell - PullRequest
6 голосов
/ 16 ноября 2011

Я хотел бы получить имя функции внутри функции, для целей ведения журнала.

Функция KornShell (ksh):

foo ()
{
    echo "get_function_name some useful output"
}

Есть ли что-то похожее на $0, которое возвращает имя скрипта в скриптах, но вместо этого предоставляет имя функции?

Ответы [ 3 ]

9 голосов
/ 16 ноября 2011

Если вы определяете функцию с помощью ключевого слова function, тогда $0 является именем функции:

$ function foo {
>     echo "$0"
> }
$ foo
foo

(проверено в pdksh.)

5 голосов
/ 18 ноября 2011

[...] каковы основные плюсы / минусы использования ключевой функции?

Основным преимуществом является то, что typeset myvar = abc внутри функции теперь является локальной переменной, без возможных побочных эффектов за пределами функции.Это делает KSH заметно безопаснее для больших сценариев оболочки.Основным недостатком, возможно, является синтаксис без POSIX.

5 голосов
/ 16 ноября 2011

Используйте ksh "function foo ..." форму:

$ cat foo1
#!/bin/ksh
foo3() { echo "\$0=$0"; }
function foo2 { echo "\$0=$0"; }
foo2
foo3
$ ./foo1
$0=foo2
$0=./foo1
...