2013-06-05 27 views
1

當我執行unison tours 2>/dev/null | grep的-A 2 '< - - >?'在bash提示符,我得到確切的輸出我要找: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中,我得到如下:

- 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----

哪裏其他垃圾是從哪裏來的?

如果現在運行齊聲那麼你得到的動畫一條線,是不斷用旋轉刷新輸出 - \ | /顯示工作文件夾,但最終消失。

如果我的grep在bash提示符下工作,爲什麼不從shell腳本啓動呢?

回答

2

動畫行包含一系列控制字符,用於修改終端上的光標位置。當輸出指向文件時,不會達到相同的效果;你只能得到全部寫入終端的字節的記錄。

+0

謝謝@chepner - 解釋額外的輸出,謝謝,雖然給我的grep子句......爲什麼它仍然在輸出文件結束? – tcpman

+0

不知道旋轉進度指示器是如何產生的,很難給出你在日誌文件中看到的確切解釋。但它看起來像一些(但不是全部)行包含足夠的'grep'匹配的微調。 – chepner

+0

......事情是我應該匹配'<-?->',這不會出現在任何與微調的界限,因此我的困惑。 – tcpman