Problema:
Eu tenho várias funções e aliases do bash. Não consigo me lembrar de todos eles de cabeça, então geralmente acabo abrindo meus arquivos .bash_functions
e .bash_aliases
para encontrar o que preciso.
Questões):
Como posso listar funções/aliases disponíveis no prompt do bash?
É possível documentar minhas funções/aliases do bash usando comentários (como o PHPDoc)?
Eu gostaria apenas de uma maneira simples/agradável de exibir o que está disponível sem precisar abrir os arquivos. Seria legal executar um comando e exibir uma lista dinâmica de minhas funções/aliases (exemplos de uso seriam uma vantagem). :)
Responder1
Para listar aliases ativos, execute:
alias
Para ver os nomes de todas as funções ativas, execute:
declare -F
Para ver os nomes e definições de todas as funções ativas, execute:
declare -f
Mais
As informações sobre aliases também estão disponíveis em um formato compatível com script com:
declare -p BASH_ALIASES
man bash
fornece mais informações sobre o alias
integrado:
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.
Em relação às funções, man bash
explica que declare
pode fornecer ainda mais informações se a extdebug
opção estiver definida:
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).
Ligações
Responder2
Eu uso a seguinte função e comentários semelhantes ao javadoc para criar uma opção --help para meus scripts:
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;
}
Nohttps://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.shvocê pode ver como ele é usado em um script real.
Responder3
Tenho documentado funções bash por conta própria ~./bashrc
com o :
(nulo) integrado. A vantagem é que ele não executará nada quando executado, mas será exibido quando impresso.
$ declare -f my_function
my_function() {
: My function does this and that
echo "foo"
}
$ my_function
foo