我有一个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>
我已经尝试了type
和declare
和which
和其他一些内置,但似乎没有保留原始格式,包括注释,或对原始函数的引用,然后我可以再次解析。
尝试:
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.