Проблема:
У меня есть несколько функций и псевдонимов bash. Я не могу вспомнить их все с ходу, поэтому обычно я открываю свои .bash_functions
и .bash_aliases
файлы, чтобы найти то, что мне нужно.
Вопросы):
Как получить список функций/псевдонимов, доступных из командной строки bash?
Могу ли я документировать свои функции/псевдонимы bash с помощью комментариев (что-то вроде PHPDoc)?
Мне просто нужен простой/красивый способ вывода того, что доступно, без необходимости открывать файлы. Было бы здорово запустить команду и заставить ее выдать динамический список моих функций/псевдонимов (примеры использования были бы плюсом). :)
решение1
Чтобы вывести список активных псевдонимов, выполните:
alias
Чтобы увидеть имена всех активных функций, выполните:
declare -F
Чтобы увидеть имена и определения всех активных функций, выполните:
declare -f
Более
Информация о псевдонимах также доступна в удобном для скриптов формате:
declare -p BASH_ALIASES
man bash
предоставляет дополнительную информацию о alias
встроенном:
alias [-p] [name[=value] ...] Alias with no arguments or with the -p option prints the list of aliases in the form alias name=value on standard output. When arguments are supplied, an alias is defined for each name whose value is given. A trailing space in value causes the next word to be checked for alias substitution when the alias is expanded. For each name in the argument list for which no value is supplied, the name and value of the alias is printed. Alias returns true unless a name is given for which no alias has been defined.
Что касается функций, man bash
пояснения, которые declare
могут предоставить еще больше информации, доступны, если extdebug
установлена опция:
Function names and definitions may be listed with the -f option to the declare or typeset builtin commands. The -F option to declare or typeset will list the function names only (and optionally the source file and line number, if the extdebug shell option is enabled).
Ссылки
решение2
Я использую следующую функцию и комментарии в стиле javadoc для создания параметра --help для своих скриптов:
PROG=$0 #The program name, used within doHelp
# Print a help message
# doHelp uses lines starting with ## to create the output
# the tags {@param ...} and {@code ...} colorize words
doHelp() {
grep '^##' "${PROG}" |
sed -e 's/^##[[:space:]]*//' |
while read line; do
if ( echo "${line}" | grep -q '{@param [^}]*}' ); then
# color parameter and echo evaulated value
eval echo -e $(echo ${line} | sed \
-e 's/^\(.*\){@param \([^}]*\)}\(.*\)$/\
\"\1\\\\E[32;40m\2\\\\E[37;40m\\t(value: \"$\2\")\3\"/');
else
# other color commands
echo -e $(echo ${line} | sed \
-e 's/{@code \([^}]*\)}/\\E[36;40m\1\\E[37;40m/g');
fi
done;
}
Вhttps://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.shвы можете увидеть, как это используется в реальном сценарии.
решение3
Я самодокументировал функции bash в моем ~./bashrc
со :
встроенным (null). Преимущество в том, что он ничего не выполнит при запуске, но покажет при печати.
$ declare -f my_function
my_function() {
: My function does this and that
echo "foo"
}
$ my_function
foo