2011-11-23 114 views
0

我的這個腳本正在慢慢變大。它的輸出在調用時被傳送到一個文件(稍後用於構建電子郵件主體),但是,我在該腳本中調用了一個特定的命令,該命令的輸出要修剪。Bash腳本。在輸出到文件的腳本中隱藏一個特定命令的輸出

我試圖做

./somecommand | egrep "pattern1|pattern2" 

其中在常規控制檯窗口,但工作正常時,偷偷溜進我的更大的腳本,該管的egrep被忽略,「./somecommand」的全輸出登錄到父腳本的輸出中。

如何解決?

我保持這個問題模糊,以避免複製粘貼整個該死的東西。更多信息可以根據要求提供。是的,腳本中的腳本中的腳本,我們需要更深入,等等。我最多可以使用五個腳本來處理不同的任務,作爲更大型的多服務器備份操作的一部分。主操作腳本被輸出到電子郵件正文周圍的文本文件中,作爲最終用戶看到的日誌記錄。我在主腳本中調用的一個特定腳本非常「嘈雜」,因此egrep只抓取與用戶相關的輸出。

謝謝大家!

+0

你可以在殼調試,'設置-vx'轉,和編輯您的問題只顯示其中的代碼被執行,與輸出的一點點的地方。你的egrep模式中是否有'*'字符?你的腳本是否在內部使用'exec ... 2>&1'捕獲/重定向?祝你好運。 – shellter

回答

0

你試過grep -v選項嗎?你是否在一些命令文件中獲得了所有腳本的單行輸出?如果多數民衆贊成的情況下,那麼你可以使用grep -v「模式」

+0

不,你誤解了,在輸出到文件的腳本中調用管道和grep時根本不起作用。我的grep行在常規控制檯窗口中工作正常,它會修剪./somecommand的輸出並很好地輸出到stdout,當該行插入到腳本內時,它會忽略您附帶的「| egrep」pattern1 | pattern2「 – reldred

+0

('1'左邊的符號)?要麼你必須包含#!/ bin/bash頭文件或者用bash scipt.sh運行它,或者把命令放在(')符號中並運行腳本 – Ajai

+0

嘗試使用 包含#!/ bin/bash頭文件 – reldred

0

您可以嘗試在調試模式下運行腳本,這樣的:

bash -x ./script 
1

是否有可能./somecommand其輸出發送到stderr而不是stdout?你可以嘗試:

./somecommand 2>&1 | egrep "pattern1|pattern2" 
+0

另一個想法是......如果在進程的菊花鏈中涉及到ssh,那麼./somecommand可能會在命令本地運行但是在你的腳本中遠程執行? – phatfingers

+0

不是,不應該走向stderr,但我會在明天恢復工作時嘗試執行,所有命令都在本地運行,不涉及SSH。 nks – reldred

+0

任何會影響./somecommand輸入的東西,不管是管道輸入,params還是ENV變量,這會使它在上下文中產生不同的輸出,而不是在命令行中隔離它。 – phatfingers