Я могу ввести псевдоним, чтобы показать список всех псевдонимов.
Но для функций все, что я могу сделать, это grep my .bash_profile
.
Это только те, которые находятся в этом файле, а не те, которые определены во вспомогательных файлах или динамически.
Есть ли более удобный способ узнать, какие функции определены в настоящее время?
Ответы:
declare -F
Справочное руководство Bash
источник
shopt -s extdebug
) И указать одно или несколько имен функций дляdeclare -F
команды. IOW,declare -F
никак не поставить имена файлов / строка # S , даже если extdebug включен, что не ясно из документации, а также не особенно интуитивным, ИМО.Предполагая bash shell:
перечислю функции.
будет перечислять только имена функций.
источник
Obsolete. See `help declare'.
даст вам имена всех функций
даст вам источник для конкретной функции
источник
declare -F
фактически печатает объявления команд, а не только имена функций:Вы можете использовать
compgen -A function
для печати только имена функций:источник
compgen -A function
было именно то, что я искал.compgen -a -A function
compgen -A function | grep "^[a-z]\+" | grep -vE "^dequote|^quote|^in_array"
typeset устарел, пожалуйста, используйте:
или
или
источник
Вместо grep вы также можете использовать fgrep или hgrep (hgrep - мой личный фаворит, это grep, но он высоко оценивает результат «grep-ped»).
hgrep можно найти здесь: ACME Labs hgrep
источник
set | grep " () $" | cut -d' ' -f1
. Но это слишком сложно по сравнению с другими ответами.grep
не является хорошим решением для этого, строки, которые соответствуют определениям функций, вызовут ложные срабатывания. @wjandrea все еще может быть пойман многострочными строками, как и любое регулярное выражение.Я не эксперт в этом, все еще учусь, но после того, как я нашел этот вопрос и ответ на него, потому что я хотел того же, я написал следующее (основываясь на ответе «Архетипов Павел объявляет »), чтобы в конечном итоге дать мне то, чего я добился: отформатированный список псевдонимов и функций:
Это было , прежде чем я увидел ответ LRI в , и так экстраполируя , что я заменить
declare
иalias
строку с соответствующимиcompgen
командами вместо того , чтобы получить:Woks угощение за то, что я хотел. Обмен в случае, если это помогает кому-либо еще.
Есть множество других «действий», доступных для
compgen -A [action]
(и других вариантов,compgen
конечно). Я нашел хорошую статью здесь, которая также содержит ссылку на страницу руководства (потомуman compgen
что в некоторых случаях она не работает).источник