2015-09-27 55 views
0

我有一個Mac App(CodeRunner),它在登錄模式下執行腳本並在窗口中顯示輸出。 在錯誤情況下,它會返回帶有轉義字符的代碼,以使輸出難以閱讀。使用顏色代碼處理bash輸出

enter image description here

有沒有辦法來處理顏色代碼?是否有過濾器來刪除顏色代碼?

+0

控制字符(轉義)仍然在輸出中或被某些東西剝離了嗎? –

+0

@Etan Reisner:他們都在那裏,附加的圖片是從輸出窗口捕獲的屏幕。 – prosseek

+0

顏色代碼是'\ E [31m',其中'\ E'是一個轉義符。該輸出顯示字符串的非轉義部分。我假設逃跑在那裏,但他們可能已經不在這一點。無論程序如何生成該輸出,都可能需要對其提交一個錯誤信息,以便在不輸出到終端時不輸出顏色代碼。 –

回答

0

在Mac OS X中,我使用了stderred庫。

#export DYLD_INSERT_LIBRARIES="/LOCATION_OF_THE_LIB/libstderred.dylib${DYLD_INSERT_LIBRARIES:+:$DYLD_INSERT_LIBRARIES}" 

刪除此庫設置將顯示沒有代碼的字符串。

-1

如果我理解你的問題,在bash(或支持它們的任何終端)中控制顏色的最簡單方法是使用ANSI轉義序列。例如:

#!/bin/bash 

blue='\e[0;34m'   # ${blue} 
green='\e[0;32m'  # ${green} 
nc='\e[0m'    # ${nc} (no color - disables previous color selection) 

printf "${blue}This text is blue, ${green}this is green${nc}\n" 

exit 0 

有許多在網絡上提供的ANSI序列完整的參考,但對於基本顏色,以下通常是足夠的:

black='\e[0;30m'  # ${black} 
blue='\e[0;34m'   # ${blue} 
green='\e[0;32m'  # ${green} 
cyan='\e[0;36m'   # ${cyan} 
red='\e[0;31m'   # ${red} 
purple='\e[0;35m'  # ${purple} 
brown='\e[0;33m'  # ${brown} 
lightgray='\e[0;37m' # ${lightgray} 
darkgray='\e[1;30m'  # ${darkgray} 
lightblue='\e[1;34m' # ${lightblue} 
lightgreen='\e[1;32m' # ${lightgreen} 
lightcyan='\e[1;36m' # ${lightcyan} 
lightred='\e[1;31m'  # ${lightred} 
lightpurple='\e[1;35m' # ${lightpurple} 
yellow='\e[1;33m'  # ${yellow} 
white='\e[1;37m'  # ${white} 
nc='\e[0m'    # ${nc} (no color - disables previous color selection) 

注:總是重置顏色默認設置爲${nc}'\e[0m')以避免在腳本完成後繼續使用顏色。最後,如果使用echo,則必須使用echo -e來處理ANSI代碼。

注2:,因爲你所看到的代碼,而不是顏色,你有幾種可能(1)您使用echo沒有-e選項允許碼的正確解釋(或類似的東西);或者(2)您使用的終端缺乏顏色功能(儘管這是值得懷疑的,因爲幾乎所有現代終端都是基於VT的默認顏色處理)。

根據下面的評論建議,您還可以使用tput(背景爲setab #,前景爲setaf #)設置顏色。

+1

他的輸出已經有了轉義碼(或者是其中的一部分)。他希望他們能夠正確解釋或從輸出中刪除。 – chepner

+1

建議使用'tput'來確定當前終端的正確代碼可能是一個好主意。 –