+ -
当前位置:首页 → 问答吧 → 请教高手如何写一个bash补全函数

请教高手如何写一个bash补全函数

时间:2011-01-25

来源:互联网

我想在:
complete -f sdnw的基础上增加一个其它的补全选项,
比如:
首先补全下面这一个选项:
arch/arm/boot/zImage

想要的效果:如果sdnw之后已敲入参数,按文件名的方式补全;如果还没输入参数的话,第一个补全参数是:
arch/arm/boot/zImage

作者: karlzheng_cu   发布时间: 2011-01-25

回复 karlzheng_cu


    兄弟,还在研究complete啊。佩服啊。

作者: blackold   发布时间: 2011-01-25



QUOTE:
回复  karlzheng_cu


    兄弟,还在研究complete啊。佩服啊。
blackold 发表于 2011-01-25 15:31



呵呵,谢谢支持:)
每天都敲命令几十次,没有补全很痛苦...

作者: karlzheng_cu   发布时间: 2011-01-25



QUOTE:
回复  karlzheng_cu


    兄弟,还在研究complete啊。佩服啊。
blackold 发表于 2011-01-25 15:31


写好了:
  1. function sdnw() {
  2.   if [ $# -ge 1 ];then
  3.     local filename=$(echo ${1/11111/})
  4.     #sudo dnw $1
  5.     sudo dnw $filename
  6.   fi
  7.   return 0
  8. }

  9. function _sdnw_complete() {
  10.      local cur=${COMP_WORDS[COMP_CWORD]};
  11.      local com=${COMP_WORDS[COMP_CWORD-1]};
  12.      local j k
  13.      if [[ $COMP_CWORD==1 && -z "$cur" ]];then
  14.        local my_complete_word=(
  15.            "11111arch/arm/boot/zImage"
  16.            "11111/media/x/compiled/uboot-1.3.4-m9_v4/u-boot-dev.signed"
  17.            "11111/media/x/compiled/clean_ver/v4.0/arch/arm/boot/zImage"
  18.            "11111/media/x/compiled/uboot-1.3.4-m9_v4/u-boot-release.signed"
  19.            "11111/media/x/compiled/v4.0-dev/arch/arm/boot/zImage"
  20.        )
  21.        COMPREPLY=($(compgen -W '${my_complete_word[@]}' -- $cur))
  22.        local dir_list=$(compgen -d)
  23.        k="${#COMPREPLY[@]}"
  24.        for j in $dir_list;do
  25.          COMPREPLY[k++]=$j
  26.        done
  27.      else   #dir complete
  28.        local k
  29.        COMPREPLY=()
  30.        local dir_list=$(compgen -d -- $cur)       k="${#COMPREPLY[@]}"
  31.        for j in $dir_list;do
  32.          COMPREPLY[k++]=$j
  33.        done
  34.        local dir_list=$(compgen -f -- $cur)
  35.        k="${#COMPREPLY[@]}"
  36.        for j in $dir_list;do
  37.          COMPREPLY[k++]=$j
  38.        done
  39.      fi
  40.      return 0
  41. }
  42. complete -F  _sdnw_complete sdnw
复制代码
不知道为什么bash补全不按COMPLY数组的顺序补全,搞得很只能在前面加了5个1...

作者: karlzheng_cu   发布时间: 2011-01-25

黑哥知道怎么让bash按COMPLY数组的顺序补全吗?

作者: karlzheng_cu   发布时间: 2011-01-25

回复 karlzheng_cu


    有空我看看,如果弄清楚了,就告诉你。

作者: blackold   发布时间: 2011-01-25



QUOTE:
回复  karlzheng_cu


    有空我看看,如果弄清楚了,就告诉你。
blackold 发表于 2011-01-25 16:43




  好:)

作者: karlzheng_cu   发布时间: 2011-01-25