Jak udokumentować moje niestandardowe funkcje i aliasy bash?
11
Problem:
Mam wiele funkcji i aliasów bash. Nie pamiętam ich wszystkich z głowy, więc zwykle otwieram pliki .bash_functionsi .bash_aliasespliki, aby znaleźć to, czego potrzebuję.
Pytania):
Jak mogę wyświetlić listę funkcji / aliasów dostępnych w wierszu poleceń bash?
Czy mogę udokumentować moje funkcje / aliasy bash przy użyciu komentarzy (trochę jak PHPDoc)?
Chciałbym po prostu w prosty / przyjemny sposób wyprowadzić to, co jest dostępne, bez konieczności otwierania plików. Fajnie byłoby uruchomić polecenie i wyrzucić dynamiczną listę moich funkcji / aliasów (przykłady użycia byłyby plusem). :)
Aby zobaczyć nazwy wszystkich aktywnych funkcji, uruchom:
declare -F
Aby zobaczyć nazwy i definicje wszystkich aktywnych funkcji, uruchom:
declare -f
Więcej
Dostępne są również informacje o aliasach w formacie przyjaznym dla skryptów z:
declare -p BASH_ALIASES
man bashzapewnia więcej informacji na temat aliaswbudowanego:
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 namein 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 bashWyjaśnia to w odniesieniu do funkcjideclare może dostarczyć jeszcze więcej informacji, jeśli extdebugjest ustawiona opcja:
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).
Ha! Zbyt łatwe. Dzięki! To całkiem proste. Wszelkie wskazówki dotyczące wyświetlania niestandardowych funkcji?
mhulse
1
@mhulse Nie ma za co. Zobacz aktualizację funkcji.
John1024
Dziękuję za aktualizację! Widzę, że dodałeś declareinformacje. Dziękuję Ci! Mógłbym żyć z declarei aliasdla szybkiego i łatwego oglądania. Właśnie zauważyłem, że mogę to zrobić, declare -f treeco wyrzuca tylko treefunkcję. Chłodny! Jestem sprzedany. Dzięki jeszcze raz! (Mogę zaakceptować to jako odpowiedź w ciągu 4 minut.)
Używam następującej funkcji i komentarzy typu javadoc, aby utworzyć opcję --help dla moich skryptów:
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;doif( echo "${line}"| grep -q '{@param [^}]*}');then# color parameter and echo evaulated valueeval 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');fidone;}
To jest naprawdę fajne! Chciałbym rozdawać zielone znaczniki wyboru dla wielu odpowiedzi. Dzięki Kasper! Nie mogę się doczekać, aby to wypróbować. :)
mhulse
Wciąż grep: : No such file or directorypróbuję uruchomić go za pomocą unix / bash jako funkcji. … Wiem, że to pytanie jest stare, ale czy możesz podać przykład, w jaki sposób można uruchomić to tak samo, jak tylko funkcję bash za pośrednictwem wiersza poleceń? Dzięki!!! :)
mhulse
1
@mhulse, zapomniałem wspomnieć, że musisz zdefiniować PROG=$0; odpowiedź zaktualizowana.
Kasper van den Berg
Dzięki Kasper! Naprawdę chcę, żeby to zadziałało, ale jak dotąd nie mam szczęścia. Nie chciałbym cię denerwować, ale czy możesz podać przykładowe połączenie z linii poleceń bash? Ponadto, jak mogłem skonfigurować --helplub -help(tj if echo "$@" | egrep -q -e '(-h)|(--help)'; then .... Chciałbym skonfigurować moje .bash_functions/, aliasesaby zezwolić na aliasname -hlub function arg --help. Dzięki jeszcze raz!
mhulse
1
@mhulse Przykładowe wywołanie z samego wiersza poleceń generateReport.shjest przydatne tylko wtedy, gdy chcesz indeksować dokumenty medyczne za pośrednictwem Zylab i wyszukiwać je za pośrednictwem Aida. Jednak, aby spróbować użyć funkcji pomocy następuje: wget https://raw.githubusercontent.com/kaspervandenberg/aida/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh && chmod a+x generateReport.sh && ./generateReport.sh --help. Jak osiągnąć drugą część za pomocą funkcji aliasname.bash_funkcje Nie wiem (jeszcze).
declare
informacje. Dziękuję Ci! Mógłbym żyć zdeclare
ialias
dla szybkiego i łatwego oglądania. Właśnie zauważyłem, że mogę to zrobić,declare -f tree
co wyrzuca tylkotree
funkcję. Chłodny! Jestem sprzedany. Dzięki jeszcze raz! (Mogę zaakceptować to jako odpowiedź w ciągu 4 minut.)Używam następującej funkcji i komentarzy typu javadoc, aby utworzyć opcję --help dla moich skryptów:
Na https://github.com/kaspervandenberg/aida/blob/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh możesz zobaczyć, jak jest używany w rzeczywistym skrypcie.
źródło
grep: : No such file or directory
próbuję uruchomić go za pomocą unix / bash jako funkcji. … Wiem, że to pytanie jest stare, ale czy możesz podać przykład, w jaki sposób można uruchomić to tak samo, jak tylko funkcję bash za pośrednictwem wiersza poleceń? Dzięki!!! :)PROG=$0
; odpowiedź zaktualizowana.--help
lub-help
(tjif echo "$@" | egrep -q -e '(-h)|(--help)'; then ...
. Chciałbym skonfigurować moje.bash_functions
/,aliases
aby zezwolić naaliasname -h
lubfunction arg --help
. Dzięki jeszcze raz!generateReport.sh
jest przydatne tylko wtedy, gdy chcesz indeksować dokumenty medyczne za pośrednictwem Zylab i wyszukiwać je za pośrednictwem Aida. Jednak, aby spróbować użyć funkcji pomocy następuje:wget https://raw.githubusercontent.com/kaspervandenberg/aida/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh && chmod a+x generateReport.sh && ./generateReport.sh --help
. Jak osiągnąć drugą część za pomocą funkcjialiasname
.bash_funkcje Nie wiem (jeszcze).