我能夠在shell腳本中打開衍生的telnet會話來運行一些命令。之後,我嘗試使用send發送轉義字符(請參見下面的語法),但它永遠不會到達能夠關閉會話的部分。有人能指引我朝着正確的方向嗎?由於這個問題,我以這種方式打開了多個telnet會話,這是我不想做的。如何通過生成的telnet會話發送轉義字符^]?
send "^]\r"
expect "telnet>"
send "close\r"
close $spawn_id
我能夠在shell腳本中打開衍生的telnet會話來運行一些命令。之後,我嘗試使用send發送轉義字符(請參見下面的語法),但它永遠不會到達能夠關閉會話的部分。有人能指引我朝着正確的方向嗎?由於這個問題,我以這種方式打開了多個telnet會話,這是我不想做的。如何通過生成的telnet會話發送轉義字符^]?
send "^]\r"
expect "telnet>"
send "close\r"
close $spawn_id
您發送ESC control sequence。嘗試send "\x1b\r"
感謝您的回覆......它指出了我正確的方向。我發現x1d \ r打印^]這正是我所需要的。 – user2840240
'\ r'真的有必要嗎? – potrzebie
@potrzebie這取決於你想發送什麼。所以不行。 :-) –
我試圖解決,因爲過去幾天的這個問題,終於找到了一個解決方案:)
的\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會話,這非常有用。
我試過這個,它對我很好。期望,做'set escseq「echo'e'| tr'e''\ 035'」' – harperville
CTRL + R代表 「^]」 轉義序列出去的telnet
這並不回答這個問題。 OP無法以編程方式發送CTRL + R,而現有的接受答案實際上提供了一個解決方案。 – LordWilmore
意識到發佈我的答案後不久。儘管如此,如果有人意外地發現它有用的原因,我還是希望答案在這裏 –
在'\ x1b' .... –
隨着'發送\ u001b'。 – potrzebie
http://donsnotes.com/tech/charsets/ascii.html#cntrl – user2840240