我寫了一個小期望腳本來連接到多個SSH服務器。 但是,如果我在初始化連接後使用終端interact
,則終端窗口的行爲非常奇怪。期望腳本 - 修復怪異的終端調整行爲
例如,如果我開始在非全尺寸端腳本,並調整窗口的大小,使的Interact
後大,它看起來就像是:
現在,我我的第一個期望腳本也有這個問題。但我可以通過將下面的代碼來解決這個問題:
trap {
set XZ [stty rows ]
set YZ [stty columns]
stty rows $XZ columns $YZ < $spawn_out(slave,name)
} WINCH
而且這個工作完全正常!我能夠毫無問題地調整終端大小。
但是,我將這段代碼添加到了我的新腳本中,其中有多個interact
在不同的proc
(函數)中。和窗口大小調整,我得到以下錯誤:
can't read "spawn_out(slave,name)": no such variable
while executing
"stty rows $XZ columns $YZ < $spawn_out(slave,name)"
我現在對如何解決這個想法。這裏是我的代碼:
#!/usr/bin/expect -f
set SERVER "0"
set CHOICE "0"
set SERVER_1_PKEY [exec cat /home/me/p1]
set SERVER_2_PKEY [exec cat /home/me/p2]
set SERVER_1_HOST "server1.com"
set SERVER_2_HOST "server2.com"
set SERVER_1_USER "server1user"
set SERVER_2_USER "server2user"
set SERVER_1_PORT "22"
set SERVER_2_PORT "22"
trap {
set XZ [stty rows ]
set YZ [stty columns]
stty rows $XZ columns $YZ < $spawn_out(slave,name)
} WINCH
proc s1 {SERVER_1_PKEY SERVER_1_HOST SERVER_1_USER SERVER_1_PORT} {
send_user "\033c"
spawn ssh ${SERVER_1_USER}@${SERVER_1_HOST} -p ${SERVER_1_PORT}
expect "assword:"
send "${SERVER_1_PKEY}\r"
interact
}
proc s2 {} {
send_user "\033c"
spawn ssh ${SERVER_2_USER}@${SERVER_2_HOST} -p ${SERVER_2_PORT}
expect "assword:"
send "${SERVER_2_PKEY}\r"
interact
}
set arg [lindex $argv 0]
switch $arg {
"" { set CHOICE "0" }
"1" { set CHOICE "1" }
"2" { set CHOICE "2" }
}
if {$CHOICE eq "0"} {
puts -nonewline " Input \[1,2\]: "
flush stdout
gets stdin SERVER
if {$SERVER eq "1"} { s1 $SERVER_1_PKEY $SERVER_1_HOST $SERVER_1_USER $SERVER_1_PORT }
if {$SERVER eq "2"} { s2 $SERVER_2_PKEY $SERVER_2_HOST $SERVER_2_USER $SERVER_2_PORT }
}
if {$CHOICE eq "1"} { s1 $SERVER_1_PKEY $SERVER_1_HOST $SERVER_1_USER $SERVER_1_PORT }
if {$CHOICE eq "2"} { s2 $SERVER_2_PKEY $SERVER_2_HOST $SERVER_2_USER $SERVER_2_PORT }
任何人都可以幫助我解決這個問題或告訴我我失蹤了什麼?
spawn_out(slave,name)在哪裏設置? –
@BradLanam它不需要設置:'spawn返回UNIX進程ID。如果沒有進程產生,返回0。變量spawn_out(slave,name)被設置爲pty從屬設備的名稱.' Rel:https://www.tcl.tk/man/expect5.31/expect.1.html – NullDev