2012-08-01 27 views
0

的輸出我想作一個單元測試,測試的是一個bash腳本自動完成正確擴展某些字符串(假設光標在結尾)。得到bash的自動完成功能測試

(我認爲)我想是能夠輸入一個字符串,並捕捉COMPREPLY輸出。

例如,假設我想測試,當我把git b<TAB><TAB>它提供​​。我怎樣才能從bash函數中獲得輸出?

在這是混亂的情況下,我希望能夠做這樣的事情:

output=$(get_compreply "git b") 
echo "$output" 
> bisect blame branch bundle 

回答

1

給你:

compgen -c YOUR_INPUT_BEFORE_TAB

+0

另一個有用的技巧是把'設置-o xtrace'在完成功能。 – suvayu 2012-08-01 10:47:17

+0

'compgen -c'給出了bash可以識別的命令列表(並且因此嘗試擴展到)。但是,我認爲這不會對所使用的特定完成實現提供任何有用的信息。 – scottkosty 2012-08-01 18:49:23

1

首先,你定義完成git? (什麼是運行complete -p的輸出?)

本頁面描述建築compspecs:http://www.debian-administration.org/article/An_introduction_to_bash_completion_part_2

下面是一個簡單的例子: -

$ output=$(compgen -W "bisect blame branch bundle" b) 
$ echo $output 
bisect blame branch bundle 
+0

是的,我確定了git的完成。我不想輸入「分歧分支束」。這就是我想要的輸出結果。請看我的例子。 – scottkosty 2012-08-01 18:26:55

+0

嗯,我天真地希望找到git的完成過程中運行的功能(例如'_git'),然後做了'compgen -F _git B'。試過這個之後,我發現如果'_git'依賴於像COMP_WORDS這樣的完成變量時,它就不會起作用。正如手冊頁所述,-f和-C開關在'compgen'下無法按預期工作。我嘗試的例子設法吐出標準輸出的所有完成,而不是填充'COMPREPLY'。 – crw 2012-08-07 09:02:52