【问题标题】:Bash: echo a variable containing program output, to a fileBash:将包含程序输出的变量回显到文件
【发布时间】:2013-06-05 12:45:22
【问题描述】:

当我执行 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

...结果很奇怪。运行 more 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 那么你确实会得到一个 animated 一行输出,它会不断刷新,旋转 -\|/ 显示工作文件夹,但是最终消失。

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

【问题讨论】:

    标签: bash grep echo unison


    【解决方案1】:

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

    【讨论】:

    • 谢谢@chepner - 这解释了额外的输出,谢谢,虽然给定了我的 grep 子句......为什么它仍然在输出文件中结束?
    • 在不确切知道旋转进度指示器是如何产生的情况下,很难准确解释您在日志文件中看到的内容。但看起来有些(但不是全部)行包含了足够的微调器,grep 匹配它。
    • ... 事情是我应该匹配 '',它不会出现在微调器的任何行中,因此我很困惑。
    • 使用hexdump 查看您的日志文件。控制光标定位的非打印字符应该很明显,您可能能够准确追踪输出的内容,这不一定是使用more 可见的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2011-07-15
    • 2013-10-12
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多