1

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

*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

……结果很奇怪。运行更多 test.log,我得到以下信息:

- 系统表/反馈她
                                                                哎呀).xls
| 过去的旅行/2012/CE0
                        12 樱桃(N...我们的菜单/丽江旅游菜单.xls

- 过去的旅行/2012/UC041112 St
- Past Tours/2012/UC081112 Lopata (N... Menus - UC081012 Lo
                2/VC110912 Levin (VI)...菜单 - VC110912 Levin (VI).xlsx
                                                                    xlsx
| 未来之旅/2013 未来
/查询/优秀/特伦斯公园...行程(Trev
改变 改变 Future Tours/File Clash Test.docx
本地:更改文件于 2013 年 6 月 5 日 16:24:40 修改,大小 10221 rw-rw----
bj-server ...:更改文件于 2013 年 6 月 5 日 16:23:53 修改,大小 10232 rw-rw----

另一个垃圾是从哪里来的?

如果您只是简单地运行unison,那么您确实会得到一条动画输出,该输出会通过旋转 -\|/ 显示工作文件夹不断刷新,但最终会消失。

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

4

1 回答 1

2

动画行包含一系列修改终端上光标位置的控制字符。将输出定向到文件时不会达到相同的效果;您只需获得写入终端的所有字节的记录。

于 2013-06-05T12:58:25.753 回答