Как документировать мои пользовательские функции и псевдонимы 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.
Еще

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.