следующая цель сценария ожидания - это распечатать имя хоста с машины 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 для имени хоста - 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" }
.
.
.
.
.
.
Я думаю, ты можешь сделать что-то вроде
expect "machine1" {send "/var/tmp/linux.ksh\r" } \
"machine2" { send /var/tmp/solaris.ksh\r" } \
.
.
.
Сказав, что может быть проще использовать безымянный который вернется 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 перед командой, чтобы гарантировать, что он правильно найден в любой системе.