从源文件中提取Bash函数注释



我有一个bash脚本,其中的函数来自一个随机文件,我不再保留原始路径。

#!/bin/bash
my_awesome_function()
{
   #- Usage: my_awesome_function <key> <to> <success>
   echo "I'm doing something great."
}
declare -x -f my_awesome_function

我之前运行过:

$ source ./some_random_file_i_dont_know_where_it_is

之后(在同一个shell中):

$ type my_awesome_function
   my_awesome_function is a function
   my_awesome_function ()
   { 
       echo "I'm doing something great."
   }

我问是因为我想包含这个函数的自动使用。理想情况下:

  exceptional_help()
  {
    echo ; type $1 | grep "#-" | tr -d "#-"
  }

可以这样使用:

  $ exceptional_help "my_awesome_function"
    Usage: my_awesome_function <key> <to> <success>

我已经尝试了typedeclarewhich和其他一些内置,但似乎没有保留原始格式,包括注释,或对原始函数的引用,然后我可以再次解析。

尝试:

my_awesome_function() {
  [ "$1" = "--help" ] && { 
     echo 'Usage: my_awesome_function <key> <to> <success>'
     return
  }
  echo "I'm doing something great."
}

的例子:

$ my_awesome_function 
I'm doing something great.
$ my_awesome_function --help
Usage: my_awesome_function <key> <to> <success>

在实践中,遵循@John1024的解决方案要可靠得多。如果可以的话,把它完整地写出来。我围绕源代码功能编写了一个小包装器,它将为文档提取特定的注释。这借用了编写帮助字符串的简单方法。

为将来参考,这里是一个面向宏的方法。

我不能完全从BSD和bash 4的stdin中获得源工作,但我确信没有中间文件是可以实现的。

它还需要一个额外的替换来关闭括号,这对于多行使用字符串来说不太好。

随机文件:

my_awesome_function(){
  #--Usage : hello <arg1> <arg2> ++#
  echo "I'm doing something great."
  echo "and I'm totally self documented."
}

自定义采购:

self_documenting_source(){
  local src tmpfile
  src=$1
  tmpfile=$(mktemp /tmp/source.XXXXXX)
  < $src 
    sed 's/#--/[ "$1" == "--help" ] && { echo " /' 
    | sed 's/#++/"; return; }/' 
    > $tmpfile
  source $tmpfile
  rm $tmpfile
}

(作为旁注,&表示基于BSD的输入替换)

结果:

$ my_function --help
  Usage : hello <arg1> <arg2> 
$ my_function 
  I'm doing something great.
  and I'm totally self documented.

最新更新