expectでウィンドウサイズに変更があった場合に自動的にターミナルをリサイズさせる

ごくたまに、以下のようなexpectを使ったスクリプトを作ってログイン時のパスワード入力やら事前処理のコマンドやらを自動入力させることがある。

#!/bin/bash
expect -c "
spawn ssh user@host
expect \"s password:\"
send \"Password\n\"
interact
"
Sponsored Links

ただ、このようにしてログインした場合、使用中にターミナルウィンドウのサイズをいじった際に一緒にリサイズされない事がある。
「stty size」コマンドでターミナルのサイズを取得できるのだけど、ターミナルのウィンドウサイズをいじっても変化がない。

このような場合は、以下のような記述を追記してtrapでWINCHシグナル(ウィンドウサイズの変更シグナル)を受け付けた際にターミナルサイズを変更するようにしてやればいい。

#!/bin/bash
expect -c "
trap {
set rows [stty rows]
set cols [stty columns]
stty rows \$rows columns \$cols < \$spawn_out(slave,name)
} WINCH
spawn ssh user@host
expect \"s password:\"
send \"Password\n\"
interact
"

 

Shebangをexpectとして記述する場合は以下。

#!/usr/bin/expect
trap {
set rows [stty rows]
set cols [stty columns]
stty rows $rows columns $cols < $spawn_out(slave,name)
} WINCH
spawn ssh user@host
expect "s password:"
send "Password\n"
interact

 

まあ、今時普通はパスワード認証じゃなくて鍵認証だと思うので、あまり使う機会も無いような気がするけど。

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*