2016-10-18 41 views
1

我有一個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 

,隨訪與(在相同的外殼):

$ 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等少數內建命令,但似乎沒有保留原來的格式包括註釋,或者是我可以再次解析的原始函數的引用。

+2

解析腳本時忽略註釋,它們不會保存在任何位置的函數中。 – Barmar

+0

你怎麼沒有原始的路徑?你不能只從腳本中讀取'source'命令嗎? – Barmar

回答

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> 
+0

他無法修改函數定義。不知何故,他不知道該功能來自哪裏。 – Barmar

+0

@Barmar如果這種解釋是正確的,那麼他就是在泡菜,是不是? – John1024

+0

是的,他是。我在上面的評論中說了很多。 – Barmar

0

在實踐中,這將是更可靠,關注@ 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." 
} 

定製採購:(作爲邊注,原來,&表示BSD輸入替代SED)

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 
} 

結果:

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

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