2009年12月7日月曜日

rlwrap、リードラインラッパーでtelnetやsqlplusに編集・ヒストリを

普段からbashとか、普通に便利なシェルに慣れていると、BackSpace利かないとか、カーソルでヒストリ出てこないとかでちょっと困る。
 
 

例えばtelnetでメールしたいとき。
(※telnetのオプション次第でラインモードいけたような気もするが、覚えてないや。)
 


# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 sawalin01.sawano.local ESMTP Sendmail 8.13.8/8.13.8; Mon, 7 Dec 2009 00:20:05 +0900
ehk^H^H^H ←★バックスペースで消そうとする。
500 5.5.1 Command unrecognized: ""hk
^[[A^[[A ←★カーソル上でヒストリ出そうとする。

 
 

ほかにもsqlplusでOracleの管理したいとき。
 


SQL> show alll
SP2-0158: unknown SHOW option "alll"
SQL> ^[[A ←★カーソル上でヒストリ出そうとする。

(ノ^皿^)ノ彡┻━┻
 
 

こういう時にリードラインラッパーのrlwrapを使うとちょっと楽になる。
 

rlwrap経由でtelnetとかsqlplusを起動すれば、普段はキャラクタ単位でガンガン通信しようとするのを、行単位で送ってくれるようにしてくれる。
ついでにコマンド履歴をホームディレクトリにテキストで保存してくれるので、コマンドログも取れるしヒストリも使えるということのようだ。
 

こんな感じで起動すると、それだけでOK。
rlwrap sqlplus /nolog
一行入力するまで送信を待ってくれるので、BackSpaceで修正できるし、カーソル上で直前の入力内容を呼び出せる。
 
 

配布もとはこちらさん。
http://utopia.knoware.nl/~hlub/uck/rlwrap/
 

使っていこう、telnetにはどうするか考え中だけど、sqlplusにはエイリアスしちゃう。
ちなみにcentosでインストールするには、readline-devel が必要だったよ。
 
 

追記:virsh で使うのもいいな。