我有一个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
和其他一些内置内容,但似乎没有任何内容保留原始格式,包括评论或对原始函数的引用,我可以然后再次解析。
答案 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.