Ожидаемый сценарий + как выполнить случай в ожидаемом сценарии

Следующая ожидаемая цель сценария - напечатать имя хоста с машины linux / solaris и в соответствии с результатами имени хоста ожидать, что скрипт запустит скрипт linux.ksh или solaris.ksh

expect_sun_script=`cat << EOF
set timeout -1
spawn   telnet 0 $IP_ADDRESS


expect login:           {send $LOGIN\r}
expect Password:        {send "PASS\r"}

expect -re {#|>}        {send "/bin/hostname\r"}

поэтому - после того как я получу имя хоста, мне нужно запустить linux.ksh для hostname - machine1

или если я получу имя хоста - machine2, тогда мне нужно запустить скрипт - solaris.ksh

но как ожидать, может запустить скрипт в соответствии с именем хоста?

согласно моему примеру ниже:

ожидайте, что на самом деле ждите machine1 - но это может быть machine2, так что застрял....

моя цель - запустить linux.ksh или solaris.ksh согласно соответствующему имени хоста

пожалуйста посоветуй?

expect "machine1"            { send "/var/tmp/linux.ksh\r "  } 
expect "machine2"            { send "/var/tmp/solaris.ksh\r" }

.
.
.
.
.
.

1 ответ

Решение

Я думаю, что вы можете сделать что-то вроде

expect "machine1" {send "/var/tmp/linux.ksh\r" } \
"machine2"  { send /var/tmp/solaris.ksh\r" } \
.
.
.

Сказав, что может быть проще использовать uname, который вернет Linux а также SunOS соответственно и должно значительно облегчить управление сценарием, так как хосты приходят и уходят.

expect -re {#|>}        {send "PATH=/bin:/usr/bin:$PATH uname\r"}

expect "Linux" { send /var/tmp/linux.ksh\r" } \ 
expect SunOS { send /var/tmp/solaris.ksh\r" }

Обратите внимание, что uname команда находится в /bin для Linux и /usr/bin для Solaris мы устанавливаем PATH перед командой, чтобы убедиться, что он правильно найден в любой системе.

Другие вопросы по тегам