Bash:将包含程序输出的变量回显到文件

时间:2013-06-05 12:45:22

标签: bash grep echo unison

当我执行 unison tours 2> / dev / null |在bash提示符下grep -A 2'< - ? - >',我得到了我正在寻找的确切输出:

*changed  <-?-> changed    Future Tours/File Clash Test.docx  
local        : changed file       modified on 2013-06-05 at 16:24:40  size 10221     rw-rw----  
bj-server... : changed file       modified on 2013-06-05 at 16:23:53  size 10232     rw-rw----*

当我把它放入shell脚本时:

#!/bin/bash
tmp=$(unison tours 2> /dev/null | grep -A 2 '<-?->')
echo "$tmp" > /home/users/itsystem/test.log

......出来很奇怪。运行 more test.log ,我得到以下内容:

- Systems Sheets/Feedback She
                                                                oup).xls
| Past Tours/2012/CE0
                        12 Cherry (N...our Menus/Lijiang Tour  Menus.xls

- Past Tours/2012/UC041112 St
- Past Tours/2012/UC081112 Lopata (N... Menus - UC081012 Lo
                2/VC110912 Levin (VI... Menus - VC110912 Levin (VI).xlsx
                                                                    xlsx
| Future Tours/2013 Futur
/ Inquiries/Outstanding/Terence Park... Itinerary (Trev
changed   changed    Future Tours/File Clash Test.docx
local        : changed file       modified on 2013-06-05 at 16:24:40  size 10221     rw-rw----
bj-server... : changed file       modified on 2013-06-05 at 16:23:53  size 10232     rw-rw----

另一个废话来自哪里?

如果你只是运行 unison 那么你会得到一个动画一行输出,它会不断刷新,旋转 - \ | /显示工作文件夹,但是最终消失了。

如果我的grep在bash提示符下工作,为什么不在shell脚本中?

1 个答案:

答案 0 :(得分:2)

动画线包含一系列控制字符,用于修改终端上的光标位置。当输出定向到文件时,无法实现相同的效果;你只需要记录所有写入终端的字节。