linux使用expect后的窗口改变问题

使用expect做自动login,一直有个麻烦的问题.就是当本地的终端窗口大小发生改变时,因为使用了expect,没法传送改变窗口的信号到远程机器上面,所以看起来很奇怪,严重影响工作的效率. 以前在perl上解决过,perl上对这个问题的详解如下 I set the terminal size as explained above, but if I resize the window, the application does not notice this. You have to catch the signal WINCH ("window size changed"), change the terminal size and propagate the signal to the spawned application:

my $exp = new Expect;
$exp->slave->clone_winsize_from(\*STDIN);
$exp->spawn("ssh somehost);
$SIG{WINCH} = \&winch;

sub winch {
  $exp->slave->clone_winsize_from(\*STDIN);
  kill WINCH => $exp->pid if $exp->pid;
  $SIG{WINCH} = \&winch;
}

$exp->interact();

There is an example file ssh.pl in the examples/ subdir that shows how this works with ssh. Please note that I do strongly object against using Expect to automate ssh login, as there are better way to do that (see ssh-keygen). 现在我们使用expect写和程序,先让我们来看看问题的现象. 普通的自动登陆的程序

#!/usr/bin/env expect
set server xxx.xxx.xxx.xxx
set user root
set passwd *******
spawn ssh $user@$server
expect -re "password:"
send "${passwd}\r"

expect -re "$"


# 给操作权还回给用户
interact

测试 #expect test.exp 工作的很好,只是当窗口发生改变时,会出问题,如下

现在我们根据上面perl中讲到的修改这个,让窗口改变的信号也能传送到远程服务器 修复后的expect.

#!/usr/bin/env expect 
#trap sigwinch spawned
trap {
 set rows [stty rows]
 set cols [stty columns]
 stty rows $rows columns $cols < $spawn_out(slave,name)
} WINCH

set server xxx.xxx.xxx.xxx
set user root
set passwd *******
spawn ssh $user@$server
expect -re "password:"
send "${passwd}\r"

expect -re "$"
# 给操作权还回给用户
interact


以上转自http://www.php-oa.com/2009/08/11/expect-window-size-changed.html


我个人的实例:

#!/usr/bin/expect
#trap sigwinch spawned
trap {
 set rows [stty rows]
 set cols [stty columns]
 stty rows $rows columns $cols < $spawn_out(slave,name)
} WINCH

#set timeout 10
spawn ssh root@(you ip)
expect "password"
send "(your password)\r"
interact

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值