如何使用变量作为文件名创建文件?

时间:2012-01-03 12:25:12

标签: bash

我正在测试移动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

我不知道为什么这些奇怪的角色以及我做错了什么。

4 个答案:

答案 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}即可。