Command-Line

當我通過管道傳輸到另一個程序時,我的 ANSI 轉義碼在哪裡?我可以保留它們嗎?

  • April 7, 2011

我有時想將顏色編碼的輸出傳遞給一個程序,例如。grep …但是當我將它傳送到另一個程序時,例如。sed,顏色程式碼失去了……

有什麼方法可以保持這些程式碼完整嗎?

這是一個失去彩色輸出的範例:

echo barney | grep barney | sed -n 1,$\ p   

許多生成彩色輸出的程序會檢測它們是否正在寫入 TTY,如果不是,則關閉顏色。這是因為當您只想擷取文本時,顏色程式碼很煩人,因此它們會嘗試自動“做正確的事情”。

從這樣的程序擷取顏色輸出的最簡單方法是告訴它寫入顏色,即使它沒有連接到 TTY。您必須閱讀該程序的文件以了解它是否具有該選項。(例如,grep--color=always選擇權。)

您還可以使用該expect腳本unbuffer創建一個偽 tty,如下所示:

echo barney | unbuffer grep barney | sed -n 1,$\ p

引用自:https://unix.stackexchange.com/questions/10823