2013-03-12 7 views
1

Определим функцию Баш fname в файле с именем a.sh:Как включить список функций bash?

fname(){ 
    echo "Foo" 
} 

Мы можем включить функцию таким образом:

source a.sh

После того, что мы можем вызовите fname в оболочку. Интересно, есть ли способ показать все включенные функции.

Спасибо!

ответ

3

Чтобы получить список всех заявленных функций и тело, вы можете запустить:

set 

или

declare -f 

Если вы хотите только имена функций:

declare -f -F 

или

declare -f -F | cut -d " " -f3 

Note that typeset is deprecated in 2013

И от http://wiki.bash-hackers.org/scripting/obsolete о typeset:

Это тесно связано с вышеизложенным, и часто должны быть использованы вместе. набор типов существует в основном для совместимости с ksh, но равен , отмеченный как «устаревший» в Bash (хотя я не совсем согласен с ). Это несколько имеет смысл, поскольку будущая совместимость не может быть гарантирована , и любая совместимость вообще требует понимания функций non-POSIX других оболочек и их различий. Использование declare вместо typeset подчеркивает ваше намерение быть «bash-only» и определенно ломается везде (кроме, возможно, zsh, если вам повезет). Проблема дополнительно осложняется Dash и Требование политики Debian для локального встроенного устройства, которое само по себе не является , полностью совместимым с Bash и другими оболочками.

+1

Ровно, спасибо! – hushwings

+0

не очень устарел. Я предполагаю, что это перечислено таким образом, чтобы люди, которые не знают, что они делают из неприятностей. Я давно хотел обновить эту страницу. – ormaaj

+0

Да, это, вероятно, более точное описание на данный момент. Благодарю. :) – ormaaj

0

typeset -f

Documentation на typeset

+0

см .: http://wiki.bash-hackers.org/commands/builtin/declare –

+1

Это нормально. '-f' - одна из переносимых опций, в которой в настоящее время нет противоречивых способов использования. Если вы это осознаете, проблем нет. (Я написал большую часть этой страницы wiki. Пренебрежение обновлением, потому что это сложный вопрос, и есть много недостающих/недокументированных вещей, чтобы их охватить). – ormaaj

Смежные вопросы