免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2221 | 回复: 10
打印 上一主题 下一主题

dialog问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-07 14:24 |只看该作者 |倒序浏览
有用过dialog功能的朋友没?
主要功能是从COMMDS数组里提取数组元素,组成新的数据,然后再执行dialog,现在的问题是如果数组元素没有包括空格,能顺利执行,但当数组元素中包含空格时,提示: Expected 3 arguments, found only 1
以下是我代码,希望哪位朋友指点一下:
#!/bin/bash
COMMDS=('aaa ' 'bbb' 'ccc')
commd(){
    local s_commds=""
    local i=0
    while ((i<${#COMMDS[@]}))
    do
        let i++
        echo "${i}"
        s_commds="${s_commds}  ${i} \"${COMMDS[`expr ${i} - 1`]}\" on"
    done
    echo "s_commds{s_commds}"
    dialog --backtitle "test" \
           --title "selection"  \
           --separate-output \
           --clear \
           --checklist "which do you want to test" 30 50 25 ${s_commds}
    return $?
}
commd

论坛徽章:
0
2 [报告]
发表于 2006-11-07 14:42 |只看该作者
哪位朋友帮帮忙啊

论坛徽章:
0
3 [报告]
发表于 2006-11-07 15:03 |只看该作者
COMMDS=('aaa','bbb','ccc')

我加了逗号,执行不报错。但是觉得好象不对。

因为之前你的结果是说:期望有3个参数,只得到一个。而现在我就只有一个参数。跟你不要空格的结果有点类似。

论坛徽章:
0
4 [报告]
发表于 2006-11-07 15:13 |只看该作者
问题应该出在dialog参数执行

论坛徽章:
0
5 [报告]
发表于 2006-11-07 15:38 |只看该作者
s_commds="${s_commds} ${i} \"${COMMDS[`expr ${i} - 1`]}\" on"
这行改成
       s_commds="${s_commds} tag${i} \"${COMMDS[`expr ${i} - 1`]}\" on"
另外
          --checklist "which do you want to test" 30 50 25 ${s_commds}
这行改成
          --checklist "which do you want to test" 20 60 4 ${s_commds}
试看看...

论坛徽章:
0
6 [报告]
发表于 2006-11-07 15:42 |只看该作者
剛又試了一下.
只要你
       s_commds="${s_commds} ${i} \"${COMMDS[`expr ${i} - 1`]}\" on"
这行改成
       s_commds="${s_commds} ${i} ${COMMDS[`expr ${i} - 1`]} on"
也就是把 \" 拿掉就正常了 = ="

不过你 checklist 座标值还是有问题

[ 本帖最后由 vantien 于 2006-11-7 15:43 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2006-11-07 18:57 |只看该作者
这样肯定不行,我都试过

论坛徽章:
0
8 [报告]
发表于 2006-11-07 20:22 |只看该作者
是吗?可是我的都正常ㄟ @@?
算了那可能是环境不同吧.

论坛徽章:
0
9 [报告]
发表于 2006-11-08 12:19 |只看该作者
哪位高手指点一下吗?

论坛徽章:
0
10 [报告]
发表于 2006-11-08 16:34 |只看该作者
  1. #!/bin/bash
  2. COMMDS=('aaa ' 'bbb' 'ccc')
  3. commd(){
  4.     local s_commds=""
  5.     local i=0
  6.     while ((i<${#COMMDS[@]}))
  7.     do
  8.         let i++
  9.         echo "${i}"
  10.         s_commds="${s_commds}  ${i} \"${COMMDS[`expr ${i} - 1`]}\" on"
  11.     done
  12.     echo "s_commds:${s_commds}"
  13.     eval "dialog --backtitle \"test\" \
  14.            --title \"selection\"  \
  15.            --separate-output \
  16.            --clear \
  17.            --checklist \"which do you want to test\" 30 50 25 ${s_commds}"
  18.     return $?
  19. }
  20. commd
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP