- PR -

expectについて

1
投稿者投稿内容
odik
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 69
投稿日時: 2007-07-27 17:13
expectについて教えてください。

●やりたいこと
expectにより以下を実行したい。
@rootユーザーよりsu - userA コマンドを実行する。
 (rootユーザーにて実行しているため、userAのパスワードの入力は不要です)
Aプロンプト「$」が表示された後に、例えばlsコマンドを実行する。

●現状
以下のシェルを作成しましたが、lsコマンドが実行される前に
シェルが終了してしまいます。
expect.sh
========================
#!/usr/local/bin/expect -f
spawn su - userA
expect {
timeout {
exit 1
} eof {
exit 2
} "\$"
}

send -- "ls -l\r"
========================

実行結果
========================
[root@test:/tmp]# ./expect.sh
spawn su - kido
[root@test:/tmp]#
========================

●教えてもらいたいこと
 プロンプト「$」の捉まえ方

●expectを使わないで、手動でsuコマンドを投入したときの画面
========================
[root@test:/tmp]# su - kido
Sun Microsystems Inc. SunOS 5.9 Generic May 2002
$ ←このプロンプトが出力されたときにlsコマンドを打ちたい。
========================

宜しくお願します。
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2007-07-27 21:12
こんばんは。

検証していませんが、こんな感じでいけるかな?

コード:
#!/usr/bin/expect

spawn su - hoge
set prompt ".*ServerName$.*"

sleep 1
expect "Password: "
send "hage\r"
expect -re $prompt
send "ls -l\r"



プロンプトの捕まえ方は、manpage の EXPECT ヒントにあります。

set prompt ".*$.*"

これでいけるかな?
odik
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 69
投稿日時: 2007-07-30 13:36
あるかな様
アドバイス頂きまして、有難うございます。

ご教授頂いたものを試してみたのですが、
うまくいきませんでした。

他の方法も色々試してみます。
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2007-07-30 22:20
正規表現記述なので、$をプロンプトで使用している場合、エスケープ必要かもしれません。
$のみが期待値であれば、

set prompt "^\$$"
set prompt "^\$ $"

かではどうでしょうか?
環境が無いので…他の識者の方の助言を期待した方が良いかもです。
うっちー
常連さん
会議室デビュー日: 2004/08/12
投稿数: 32
投稿日時: 2007-07-31 12:33
set prompt "$" では?

一応 Cent4 では以下で動作しました。

コード:
#!/usr/bin/expect

spawn su - user
set prompt "$"

sleep 1
expect -re $prompt
send "ls -l¥r"
expect -re $prompt
send "exit¥r"
expect eof


(コード内すべて小文字)
odik
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 69
投稿日時: 2007-08-09 16:07
あるかな様
うっちー様
ご教授頂きまして有難うございます。
返信遅くなってすみません。

ご教授頂いたものを試してみたのですが、
何故かうまくいきませんでした。

プロンプトを%に替えてやると
拾えるようになりました。
やはり正規表現でひっかかってしまう
のでしょうか
1

スキルアップ/キャリアアップ(JOB@IT)