免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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
2 [报告]
发表于 2018-07-03 18:56 |只看该作者
本帖最后由 1cpuer 于 2018-07-04 16:26 编辑

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

论坛徽章:
0
3 [报告]
发表于 2018-07-03 19:45 |只看该作者
回复 3# 1cpuer

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

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
4 [报告]
发表于 2018-07-03 21:58 |只看该作者
回复 1# KenZhang1031


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

评分

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

查看全部评分

论坛徽章:
0
5 [报告]
发表于 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
6 [报告]
发表于 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
7 [报告]
发表于 2018-07-04 16:38 |只看该作者
自己实现了
dmesg -c > /dev/null 2>&1    # 清除dmesg信息
#执行程序
str=`dmesg -c`                     # 获取执行程序造成的dmesg信息
echo $str | grep "error"
# 根据是否搜索到error进行处理
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP