我正在测试移动Android设备,我想将设备日志重定向到一个文件,该文件的名称表示我的测试日期和时间,以及正在测试的设备型号。 对于第一个问题,我已经解决了
now=$(date +"%b_%d_%Y_%k_%M");adb logcat -c;adb logcat|tee $now
所以:
$ echo $now
Jan_03_2012_13_09
并且tee命令创建一个具有此文件名的文件。
至于设备型号,我写了两个从adb shell获取它的bash行,即
device=$(adb shell cat /system/build.prop | grep "^ro.product.device=")
deviceshortname=$(echo $device | sed 's/ro.product.device=//g')
(不是最佳,因为我在bash编程方面不是很好...... :)但我设法得到
$ echo $deviceshortname
LT15i
我的问题是如何结合$now
和$deviceshortname
来获取文件名,例如:
LT15i_Jan_03_2012_13_19
我尝试设置另一个变量:
filename=($(echo $deviceshortname"_"$now))
得到了:
$ echo $filename
LT15i_Jan_03_2012_13_19
但如果我尝试重定向日志: $ adb logcat | tee $ filename
我获得了这样的文件:
-rw-r--r--+ 1 ele None 293 Jan 3 13:21 ?[01;31m?[K?[m?[KLT15i_Jan_03_2012_13_19
我不知道为什么这些奇怪的角色以及我做错了什么。
答案 0 :(得分:2)
看起来像adb
使用的ANSI序列为输出着色。
答案 1 :(得分:2)
正在为输出添加颜色。它可能是grep(1)
,可能是adb
,它可能会被放入您正在阅读的/system/build.prop
资源中。
如果你很幸运,它会被grep(1)
添加 - 因为使用--color=no
禁用它非常容易:
device=$(adb shell cat /system/build.prop | grep --color=no "^ro.product.device=")
deviceshortname=$(echo $device | sed 's/ro.product.device=//g')
如果颜色是由adb
添加的,那么它可能有一个命令行选项,要求它避免为输出着色。
如果颜色以某种方式硬编码到/sys/build.prop
资源中,那么您需要一些过滤掉颜色代码的小工具。我没有一个方便(并且它是就寝时间),但您可以构建一个以tr(1)
开头的方法来删除\033
ASCII ESC
个字符。
答案 2 :(得分:0)
我不确定我是否遗漏了什么,但这对我有用
P1 = FOO p2 = $(日期+%d_%m_%Y)
cat sample_file.txt | tee $ p1“_”$ p2
答案 3 :(得分:0)
只需输入:echo ${deviceshortname}${now}
即可。