esperar: cómo utilizar scripts esperar desde una subrutina bash

esperar: cómo utilizar scripts esperar desde una subrutina bash

Quiero escribir un script de inicio de sesión en espera. Pero quiero que esto se reutilice en otros scripts diferentes. Quiero que todos los comandos de inicio de sesión formen parte de una subrutina bash. es decir, en lugar de

expect_login.sh
#!/bin/usr/expect -f
spawn ....
set ....

Quiero esto:

expect_login
{
    # put some necessary command to initiate expect program

    spawn ...
    set ...
}

entonces me gustaría colocar esta subrutina en un archivo/biblioteca que sería reutilizada por muchos scripts diferentes.

¿Cómo puedo hacer eso?

Gracias

PD: Perdón por mi sintaxis imprecisa de bash/expect. Solo quería escribir en forma de pseudocódigo.

Respuesta1

Yo optaría por una solución de 2 partes. Una parte es el script de espera y la otra parte es el script de Shell.

Para el script esperado, debe ser un script genérico que acepte entradas y produzca resultados.

Este es mi ejemplo de script de espera que acepta el nombre de host y la contraseña y producirá el nombre de vcprofile para el servidor.

[user@server ~]$ cat getvcprofile.expect
#!/usr/bin/expect

set timeout 2

set host [lindex $argv 0]

set password [lindex $argv 1]

spawn ssh "ADMIN\@$host"

expect_after eof { exit 0 }

expect  "yes/no" { send "yes\r" }

expect  "assword" { send "$password\r" }

expect "oa>" { send "show vcmode\r" }

expect "oa>" { send "exit\r" }

exit

En el script de shell, llamaré al script expect y le proporcionaré la variable, en este caso el nombre de host de vcsystem. La contraseña es en realidad un patrón según el nombre de host OA@XXXX, donde XXXX es el último número de 4 dígitos del servidor.

[user@server ~]$ cat getvcprofile.sh
#/bin/bash

# get VC profile for a host

host=$1

#get the blade enclosure
enclosure=`callsub -enc $host |grep Enclosure: | cut -d" " -f2`

if [ ! -z $enclosure ]; then

#get the last 4 digit of the enclosure
fourdigit=${enclosure: -4}

domain=`./getvcprofile.expect ${enclosure}oa OA@${fourdigit} |grep Domain|awk '{print $NF}'`
echo $domain

else

echo "None"

fi

Con esta solución de 2 partes, puedo hacer algo como esto:

for X in `cat serverlist.txt`; do echo -n $X": "; ./getvcprofile.sh $X; done 

E imprimirá el vcprofile para cada uno de los servidores en el archivo serverlist.txt.

información relacionada