如何记录我的自定义bash函数和别名?


11

问题:

我有多个bash函数和别名。我不记得所有的人把我的头顶部,所以我通常最终会打开我.bash_functions.bash_aliases档案找到我所需要的。

问题:

如何列出bash提示中的可用功能/别名?

我可以使用注释(如PHPDoc之类的)来记录bash函数/别名吗?

我只是想要一种简单/不错的方式来输出可用的内容而不必打开文件。运行命令并吐出我的函数/别名的动态列表会很酷(使用示例会是一个加号)。:)

Answers:


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 2014年

1
@mhulse,欢迎您。有关功能,请参见更新。
John1024

感谢更新!我看到您添加了declare信息。谢谢!我可以住在一起declare,并alias快速,方便观看。我只是注意到我可以做到declare -f tree,只吐出了该tree功能。凉!我卖了 再次感谢!(我可以在4分钟内回答这个问题。)
mhulse 2014年

2
@ashumeow的ss64.com的文本在ss64.com/bash/alias.html与他们的版权和发行条款ss64.com/docs/copyright.html(非商业!)BREAK GFDL的条款在bash的--the许可证手册,因为它们包含来自gnu.org/software/bash/manual/html_node/Aliases.html的文本:应允许将Bash手册的衍生作品用于商业用途。由于这个原因和类似的归属原因,没有参考文献的汇编看起来并不好。
imz –伊万·扎哈拉里舍夫(Ivan Zakharyaschev),2014年

您可能会发现使用Shell脚本选项的更简单处理中说明的技术。
DocSalvager 2014年

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 2014年

grep: : No such file or directory当尝试通过unix / bash作为功能运行它时,我一直在获取信息。…我知道这个问题很古老,但是您能举一个例子说明如何仅通过命令行运行bash函数吗?谢谢!!!:)
mhulse 2014年

1
@mhulse,我忘了提到您需要定义PROG=$0;答案已更新。
卡斯珀范登伯格2014年

谢谢卡斯珀!我真的很想让它工作,但是到目前为止我还没有运气。我不想一直困扰您,但是您能从bash命令行中提供示例调用吗?另外,我该如何设置--help-help(即,if echo "$@" | egrep -q -e '(-h)|(--help)'; then ...我很乐意设置我的.bash_functions/ aliases以允许aliasname -hfunction arg --help。再次感谢!
mhulse 2014年

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 --helpaliasname我尚不知道如何在.bash_functions中使用以实现第二部分。
卡斯珀范登伯格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.