2017-06-03 33 views
0

我有我的bash腳本它打印了很多標準輸出信息的複雜的命令。這個命令很複雜,需要一些時間才能完成,但完全正常工作。與此同時,我使用的是管道與三通它被寫入到一個解析後任務的文件。Bash。使用ccze不改變數據解析

cmd="myComplexCommand | tee /dev/fd/5" 
exec 5>&1 
stored_output=$(eval "${cmd}") 

直到這裏一切正常。現在

,我試圖實現ccze上色屏輸出。通常在任何命令上使用它都很簡單:

anyCommand | ccze -A 

而且所有東西都以美顏色方式打印。問題是,如果我嘗試將其應用到我的特殊情況下,使用管ccze我myComplexCommand後,屏幕上的輸出彩色(太好了!),但它改變了存儲在我想在我的崗位解析文件輸出-parse任務,它不起作用。

有打印的文件(不ccze修改)在屏幕上,並在同一時間它店使用ccze的美容方式的命令後解析它一擊呢?

+0

BTW,使用'eval'這裏是一個嚴重的代碼味道。使用函數來存儲代碼的更好的做法是:'cmd(){myComplexCommand | tee/dev/fd/5; }',然後調用'cmd'。 –

回答

1

tee在一個點文件在管道前着色發生:

myComplexCommand | tee filename | ccze -A 

順便說一下,在bash 4.1或更高版本,如果要發送的數據的很多無論是文件還是彩色格式的TTY,您都可以將這兩項操作放在一個進程中進行替換:

exec {stdout_backup}>&1 
exec {store_and_colorize}> >(tee filename | ccze -A | tee /dev/fd/"$stdout_backup") 

,然後再用該進程替換多次,只要你喜歡:

result=$(something >&$store_and_colorize) 
another_result=$(something_else >&$store_and_colorize) 

你得到的ccze一份副本跨多個應用持久的方式。

+0

你有沒有關於該proc子使用情況的任何文檔?從未見過它。 – 123

+0

哪些細節不熟悉? 'exec {name}> ...是bash 4.1的自動FD分配,不是特定於進程替換。 –

+0

是的,我不知道它具體是什麼。 Nvm'自動FD分配'足以找到它,歡呼。 – 123