2012-08-22 66 views
0

http://www.termsys.demon.co.uk/vtansi.htm這個鏈接有一堆的轉義代碼,我已經寫了有移動光標,改變顏色的腳本 - 我很好奇如何去一個編程左右得到反應?這似乎並不爲標準輸出或標準錯誤,據我可以告訴讓我很困惑如何訪問終端狀態響應?

例如,在ZSH我做了以下內容:

[email protected] ~ » echo "\e[6n" 

[email protected] ~ » 3;1R 

到查詢的響應來通過作爲下一個終端命令?我不明白爲什麼,Bash似乎也沒有證明這種行爲。

我知道還有其他方法可以做到這一點使用tput的的例子,但我想知道在一個較低的水平發生了什麼,以及爲什麼。

回答

1

的響應來通過從所述終端(或終端仿真器)的串行口(或其它tty設備)的頻道上。這是用於傳輸在終端鍵盤輸入的字符的相同頻道;沒有帶外信令。

既然你沒看過發送查詢後的反應,它被解釋爲你的shell一系列按鍵的。不同的炮彈對異常的鍵盤輸入有不同的響應。

爲了正確地讀出的響應,則必須採取端子out基於行的(「ICANON」或「熟」)模式,並在一次讀取一個字節(從tty,即可能標準輸入,相同的地方你會從中讀取鍵盤輸入),直到找到終止字符。而且沒有真正的方法來區分同時發生的真實按鍵響應。

這是一種不潔的業務,如果你想做到這一點在shell腳本中添加額外的痛苦。

+0

非常感謝你,這真的幫了我的理解。 – donatJ