3

I want to run sshd restart on Linux and Solaris machine via expect ( my expect run in my ksh script )

I create expect script so when expect see the prompt "#" then he run sshd restart

but the problem is that I run this expect also on solars and the prompt there is ">" so how to create one expect line that support "#" and ">" prompt

on linux

    expect #                {send "/etc/init.d/sshd restart\r"}

solaris

   expect >                {send "/etc/init.d/sshd restart\r"}
yael
  • 2,363
  • 4
  • 28
  • 41

2 Answers2

3

Use a glob-pattern: expect {[#>]}

or a regexp: expect -re {#|>} -- the regexp pattern can get more elaborate. I recommend you anchor prompt matching to the end of the line. Often prompts end with a space, so you could:

expect -re {[#>] ?$}
glenn jackman
  • 4,320
  • 16
  • 19
0

You could put this in an if statement by checking the output of uname -s, or by checking the output of:

cat /etc/release

cat /etc/redhat-release

cat /etc/lsb-release

And use something like:

if [[ $(uname -s) == "Linux" ]];then
   expect #  {send "/etc/init.d/sshd restart\r"}
else
   expect >  {send "/etc/init.d/sshd restart\r"}
fi

I have not used ksh for some years so sorry if syntax is wrong!

Andy H
  • 382
  • 1
  • 4
  • yes but how to implemented the expect solution with Regular expression ( not by if then ..) , for example with expect -re ..... or something like that . .. . . – yael Sep 05 '12 at 10:59
  • expect -re {[$#] } should match both. – Andy H Sep 05 '12 at 11:13