Як документувати власні функції bash та псевдоніми?


11

Проблема:

У мене є кілька функцій bash та псевдонімів. Я не можу згадати їх усіх у верхній частині голови, тому я, як правило, відкриваю свої файли .bash_functionsта .bash_aliasesфайли, щоб знайти те, що мені потрібно.

Питання:

Як я можу перерахувати функції / псевдоніми, доступні у запиті bash?

Чи можна мені документувати мої функції bash / псевдоніми за допомогою коментарів (начебто PHPDoc)?

Я просто хотів би простий / приємний спосіб вивести доступне без необхідності відкривати файли. Було б здорово запустити команду і запропонувати їй виписати динамічний список моїх функцій / псевдонімів (приклади використання були б плюсом). :)

Відповіді:


17

Щоб перелічити активні псевдоніми, запустіть:

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).

Посилання

  1. http://ss64.com/bash/alias.html
  2. http://linfo.org/alias.html

Га! Надто легко. Спасибі! Це досить просто. Якісь поради щодо перерахування користувацьких функцій?
mhulse

1
@mhulse Ваше запрошення Дивіться оновлення функцій.
John1024

Дякуємо за оновлення! Я бачу, ви додали declareінформацію. Дякую! Я міг би жити declareі aliasшвидко і просто переглядати. Я щойно помітив, що можу робити те, declare -f treeщо випльовує лише treeфункцію. Класно! Мене продають. Знову дякую! (Я можу прийняти це як відповідь через 4 хвилини.)
mhulse

2
@ashumeow Текст ss64.com за адресою ss64.com/bash/alias.html з їх авторськими правами та умовами розповсюдження ss64.com/docs/copyright.html (некомерційний!) РОЗВИТАЙТЕ умови GFDL - ліцензія bash керівництво, оскільки вони містять текст з gnu.org/software/bash/manual/html_node/Aliases.html : слід допускати комерційне використання похідних творів посібника Bash. Їх складання без посилань не здається приємним з цієї та подібних причин атрибуції.
imz - Іван Захарящев

Ви можете знайти техніку, проілюстровану у спрощеній обробці параметрів сценарію оболонки, які будуть корисними.
DocSalvager

7

Я використовую таку функцію і 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 ви можете побачити, як він використовується в реальному сценарії.


Це дійсно круто! Я б хотів, щоб я міг дати зелені галочки для кількох відповідей. Дякую Каспер! Я не можу чекати, щоб спробувати це. :)
mhulse

Я постійно grep: : No such file or directoryнамагаюся запустити його через unix / bash як функцію. … Я знаю, що це питання давнє, але чи можете ви навести приклад того, як можна запустити це лише як функцію bash через командний рядок? Спасибі!!! :)
mhulse

1
@mhulse, я забув згадати, що вам потрібно визначитися PROG=$0; відповідь оновлена.
Каспер ван ден Берг

Дякую Каспер! Мені дуже хочеться, щоб це працювало, але поки що мені не пощастило. Мені б не хотілося, щоб вас клопочуть, але чи можете ви навести приклад дзвінка з командного рядка bash? Крім того, як я можу налаштувати --helpабо -help(тобто if echo "$@" | egrep -q -e '(-h)|(--help)'; then .... Я хотів би налаштувати своє .bash_functions/ aliasesщоб дозволити aliasname -hабо function arg --help. Ще раз спасибі!
mhulse

1
@mhulse Приклад дзвінка з самого командного рядка generateReport.shкорисний лише у тому випадку, якщо ви хочете індексувати медичні документи за допомогою Zylab та запитувати їх через Aida. Тим НЕ менше, спробувати в використанні допомогою функції наступного: wget https://raw.githubusercontent.com/kaspervandenberg/aida/master/Search/zylabPatisClient/src/main/scripts/generateReport.sh && chmod a+x generateReport.sh && ./generateReport.sh --help. Як досягти другої частини за допомогою використання aliasnameв .bash_functions я (ще) не знаю.
Каспер ван ден Берг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.