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

时间:2016-10-18 05:27:55

标签: 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>

我已尝试typedeclare以及which和其他一些内置内容,但似乎没有任何内容保留原始格式,包括评论或对原始函数的引用,我可以然后再次解析。

2 个答案:

答案 0 :(得分:1)

尝试:

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>

答案 1 :(得分:0)

在实践中,遵循@ John1024的解决方案会更加可靠。如果可以的话,完整的。我为源代码功能编写了一个小包装器,它将为docs提取特定的注释。借用了编写帮助字符串的简单方法。

以下参考是一种以宏观为导向的方法。

我无法在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 sed中的输入替换。)

结果:

$ my_function --help
  Usage : hello <arg1> <arg2> 

$ my_function 
  I'm doing something great.
  and I'm totally self documented.