2014-02-25 2 views
0

compgen 내장 쉘에는 두 가지 어려움이 있습니다. 나는 코드 (ls 사용) 간단한 bash는 _filedir -like에서 보여 시도 :bash의 공백과 접미사 complete()

_myfiledir(){ 
    path="$cur" 
    prefix=`echo /$path | grep -o "[0-9a-Z\-+_/]*/"` 
    sufix=`echo /$path | grep "/[0-9a-Z\-+_]*$" | grep -o "[0-9a-Z\-+_]*$"` 
    res=`ls -p $prefix` 
    COMPREPLY=($(compgen -o nospace -W "$res" -- $sufix)) 
} 

을이 경우 cur=="usr/li" 다음 prefix=="/usr/"

sufix=="li" 내가이 어려움이있을 때. 공간과 교체가 필요합니다. 예를 들어 :

$ script usr/li[TAB] 

내가 얻을 :

$ script lib/ <- additional space here 

내가이 필요합니다

$ script usr/lib/ <- no space here 

이 코드는 예입니다.

답변

0

-o nospace

이 옵션 compgen 맥락에서 작동하지 않습니다. 옵션을 변경하려면 compopt을 사용하십시오. 귀하의 경우에는 공백 문제에 대해 compopt -o nospace, 파일 이름에 대해서는 compopt -o filenames이 유용합니다. 파일 이름에주의하십시오. $prefix ~ $res 변수를 추가해야합니다. 옵션 filenames은 자동 완성을 위해 사용자에게 표시 될 때 전체 경로 부분 만 자릅니다.