這是從here的延續,我將所有輸出捕獲到終端。這個腳本在我的機器上運行良好,但在另一個上,我在管道到espeak
時聽到額外的東西,而不是在寫入文件或打印文件時。這對調試來說有點痛苦,但是有一點試驗和錯誤,我認爲將其縮小到~/.bashrc
- >/etc/bashrc
- >/etc/profiles.d/vte.sh
做了一些我認爲設置爲PROMPT_COMMAND="__vte_prompt_command"
的事情。至少我認爲這是,但PROMPT_COMMAND=
採購vte.sh
後不能修復。隱形終端輸出正在破壞腳本
無論如何,它出現了一些特殊字符被打印來改變窗口標題(printf "\033]0;%[email protected]%s:%s\007%s"...
也許?)。這些字符在寫入文件或輸出到終端時不會出現,但在管道應用程序(例如espeak
)中執行。
我的第一個問題是,我該如何檢測這些特殊字符的存在?
while read line
do
espeak "$line" #can hear extra stuff
echo "GOT: [$line]" #only expected output printed
done <input_pipe
我的下一個問題是,我怎麼能忽略我的循環任何隱形/特殊輸出(我只有通過試錯,這似乎是相當緩慢的發現vte
)?(並只獲得caracters我會在終端最終看到)
只是剝離字符不夠健壯。刪除整個「控制」序列[使用正則表達式](http://unix.stackexchange.com/questions/14684/removing-control-chars-including-console-codes-colours-from-script-output)似乎做了一個漂亮好工作,但我仍然覺得應該有更好的方法。謝謝(你的)信息!尤其是'hexdump'。 – jozxyqk