2013-10-16 42 views
6

我能夠在shell腳本中打開衍生的telnet會話來運行一些命令。之後,我嘗試使用send發送轉義字符(請參見下面的語法),但它永遠不會到達能夠關閉會話的部分。有人能指引我朝着正確的方向嗎?由於這個問題,我以這種方式打開了多個telnet會話,這是我不想做的。如何通過生成的telnet會話發送轉義字符^]?

send "^]\r" 
expect "telnet>" 
send "close\r" 
close $spawn_id 
+0

在'\ x1b' .... –

+0

隨着'發送\ u001b'。 – potrzebie

+0

http://donsnotes.com/tech/charsets/ascii.html#cntrl – user2840240

回答

8

您發送ESC control sequence。嘗試send "\x1b\r"

+3

感謝您的回覆......它指出了我正確的方向。我發現x1d \ r打印^]這正是我所需要的。 – user2840240

+1

'\ r'真的有必要嗎? – potrzebie

+0

@potrzebie這取決於你想發送什麼。所以不行。 :-) –

2

我試圖解決,因爲過去幾天的這個問題,終於找到了一個解決方案:)

\x1b\r\x1d\r我沒有工作。我發現這裏的解決方案:Using Control character in a script with tr and echo

我用下面的代碼:

escseq=`echo 'e' | tr 'e' '\035'` 

使用$escseq獲得按Ctrl +]。

這是如何工作:

如果您的迴音不能直接進行控制字符,tr工具能爲你做。 tr也理解八進制序列。製作你不想要的回聲輸出字符,並將它們轉換成你想要的控制字符。

例如,以使4個字符的序列ESCAPE CTRL-A [CTRL-W,使用這樣的命令:

escseq=`echo 'ea[w' | tr 'eaw' '\033\001\027'` 

TR讀取四個字符向下從回波管;它將e轉換爲ESCape(八進制033),a轉換爲CTRL-a(八進制001),將w轉換爲CTRL-w(八進制027)。左括號沒有改變; tr按原樣打印。

注意:如果要使用shell腳本自動註銷telnet會話,這非常有用。

+0

我試過這個,它對我很好。期望,做'set escseq「echo'e'| tr'e''\ 035'」' – harperville

0

CTRL + R代表 「^]」 轉義序列出去的telnet

+0

這並不回答這個問題。 OP無法以編程方式發送CTRL + R,而現有的接受答案實際上提供了一個解決方案。 – LordWilmore

+0

意識到發佈我的答案後不久。儘管如此,如果有人意外地發現它有用的原因,我還是希望答案在這裏 –