2012-05-04 48 views
1

可能重複穆蒂字命令完成:
Properly handling spaces and quotes in bash completion對於bash

我想是bash補全使用穆蒂字引號的字符串。

例如我希望能夠做到這一點

$ command <tab> 
    "Long String 1" 
    "Long String 2" 

,其中「龍串1」和「長字符串2」是按選項卡後給出的建議。

我試圖用這個地方~/strings包含引號的字符串

function _hista_comp(){ 
    local curw 
    COMPREPLY=() 
    curw=${COMP_WORDS[COMP_CWORD]} 
    COMPREPLY=($(compgen -W '`cat ~/strings`' -- $curw))  
    return 0 
} 
complete -F _hista_comp hista 

上述功能按空白進行分割字符串列表。有沒有辦法讓它返回整個引用的字符串?

例如,如果~/string有以下行

"Long String 1" 
    "Long String 2" 

它將給5個建議而不是2

+0

看起來像是http://stackoverflow.com/questions/1146098/properly-handling-spaces-and-quotes-in-bash-completion的副本。答案似乎是「compgen」與空間不搭配。 –

回答

1

嘗試各種事情之後,我發現,添加

IFS=$'\x0a'; 

到開始該函數(將輸入分隔符更改爲新行)使函數處理空間正確。

因此函數將

function _hista_comp(){ 
    IFS=$'\x0a'; 
    local curw 
    COMPREPLY=() 
    curw=${COMP_WORDS[COMP_CWORD]} 
    COMPREPLY=($(compgen -W '`cat ~/strings`' -- $curw))  
     uset IFS 
    return 0 
} 
complete -F _hista_comp hista 

這將使

$ command <tab> 
    "Long String 1" 
    "Long String 2" 

因爲我想。

+1

或者更簡單地說,'IFS = $'\ n''。順便說一下,你的答案中的功能與你問題中的功能是一樣的(我想你忘了添加'IFS'這一行 - 我也會把它變成'local')。 –