それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Expectコマンドを使ってsu/ sudo の処理を書いてみる。

expectを使うと、対話ダイアログをうまく操作できる。

標準出入力をうまく扱うことが出来て、バッチ処理に向いている。よくできて便利らしい。

が、、、、

  1. 独自スクリプトなので面倒ですね。
  2. さらにデフォルトでインストールされていない

という使いにくさがありました

使い方

expect -c "
swapn su
expect 'Passwd:'
send 'root_pw'
"

インストール

sudo aptitude install expect


知識として仕入れました、実践投入するのはちょっと面倒ですね

man より抜粋

名前
       expect - 対話的なプログラムとのやりとりを自動化するプログラム, バージョン 5



書式
       expect [ -dDinN ] [ -c cmds ] [ -[f|b] ] cmdfile ] [ args ]


イントロダクション
       Expect   は、スクリプトの指示に従って、対話的なプログラムと"会話"する
       プログラムである。以下のスクリプトに示すように、 Expectには、対話プログラム
       からの期待されうる入力とそれに対する正しい応答を教えておく。インタプリタ
       は分岐処理と高度な制御構造を提供し、対話プログラムへの指示を行なう。
       さらに、必要な時にスクリプトから制御を奪って直接人間が指示を行ない.
       その後、制御をスクリプトへ戻すことができる。

結論 sshなら rubygemsssh 使った方が楽

require 'rubygems'
require 'net/ssh'
Net::SSH.start('192.168.2.1', 'root', :password=>'root_pw'){|ssh|
  output = ssh.exec!("hostname;")
  puts output
}

プロセス開くなら open3すればいい

rubyで open3 つかってパイプ開いた方が楽




expectの使う場面をもっとしりたいです。たぶん出来る子だと思うんだけど。。。