忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 881 | 回复: 6

[文本处理] 怎么获取某些程序的输出结果 [复制链接]

论坛徽章:
0
发表于 2018-07-03 18:40 |显示全部楼层
本帖最后由 KenZhang1031 于 2018-07-03 19:42 编辑

有些操作有错误输出,但是echo $?返回的值都是0。无法通过$?判断,只能分析输出结果。但是有些输出结果无法通过str=`操作`,这样来获取。
比如:(这个例子我知道是已经挂载了,$?也不是0,请勿回复这个问题,主要是想说明如何获取打印输出)
  1. ~ # ubiattach /dev/ubi_ctrl -m 5 -d 1
  2. UBI error: ubi_attach_mtd_dev: mtd5 is already attached to ubi1
  3. ubiattach: error!: cannot attach mtd5
  4.            error 17 (File exists)
复制代码
这里输出明显有一堆打印,但是打印不会赋值给一个变量,比如:
  1. ~ # str=`ubiattach /dev/ubi_ctrl -m 5 -d 1`
  2. UBI error: ubi_attach_mtd_dev: mtd5 is already attached to ubi1
  3. ubiattach: error!: cannot attach mtd5
  4.            error 17 (File exists)
  5. ~ # echo $str

复制代码
变量打印是空的,输出仍然输出到控制台上。




怎么获取到这堆打印输出呢?以便要识别到输出里有error。

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-07-03 18:56 |显示全部楼层
本帖最后由 1cpuer 于 2018-07-04 16:26 编辑

ubiattach # 文件系统的挂载
已经挂了
卸载了再设置变量试试

论坛徽章:
0
发表于 2018-07-03 19:45 |显示全部楼层
回复 3# 1cpuer

我知道已经挂了。我不是要处理这个问题。我是故意拿这个当例子,想要知道怎么获取打印输出

论坛徽章:
16
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:0915-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59CU十四周年纪念徽章
日期:2018-05-15 11:36:3815-16赛季CBA联赛之广东
日期:2018-05-14 09:52:4215-16赛季CBA联赛之深圳
日期:2018-05-04 21:53:0815-16赛季CBA联赛之辽宁
日期:2018-04-02 14:03:3915-16赛季CBA联赛之北京
日期:2018-03-23 15:24:07
发表于 2018-07-03 21:58 |显示全部楼层
回复 1# KenZhang1031


  1. str=`ubiattach /dev/ubi_ctrl -m 5 -d 1 2>&1`
复制代码

评分

参与人数 1信誉积分 +10 收起 理由
KenZhang1031 + 10

查看全部评分

论坛徽章:
0
发表于 2018-07-04 09:23 |显示全部楼层
回复 1# KenZhang1031

#ubiattach /dev/ubi_ctrl -m 5 -d 1 2>err.log#grep error err.log

评分

参与人数 1信誉积分 +10 收起 理由
KenZhang1031 + 10

查看全部评分

论坛徽章:
0
发表于 2018-07-04 15:10 |显示全部楼层
回复 6# wh7211

提供的方式可以捕获到程序ubiattach自己打印的信息,如果是程序引起内核打印的错误则捕获不到。有些程序执行,本身不会输出错误信息的,程序认为是对的,返回$?值是0,但是却会引起内核打印错误信息(dmesg可以看到)。
有什么办法捕获程序执行成功了,但是引起内核打印的错误信息呢?
比如:

  1. ~ # ubiattach /dev/ubi_ctrl -m 5 -d 1
  2. UBI error: ubi_attach_mtd_dev: mtd5 is already attached to ubi1
  3. ubiattach: error!: cannot attach mtd5
  4.            error 17 (File exists)
  5. ~ #
复制代码
第一行是内核打印的信息。后面的是程序自己打印的。
提供的方法捕获不到内核打印的信息:
  1. ~ # str=`ubiattach /dev/ubi_ctrl -m 5 -d 1 2>&1`
  2. UBI error: ubi_attach_mtd_dev: mtd5 is already attached to ubi1
  3. ~ # echo $str
  4. ubiattach: error!: cannot attach mtd5 error 17 (File exists)
  5. ~ #
复制代码


论坛徽章:
0
发表于 2018-07-04 16:38 |显示全部楼层
自己实现了
dmesg -c > /dev/null 2>&1    # 清除dmesg信息
#执行程序
str=`dmesg -c`                     # 获取执行程序造成的dmesg信息
echo $str | grep "error"
# 根据是否搜索到error进行处理
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP