A leitura espera comandos de script do arquivo [closed]

0

Eu preciso atualizar configurações de vários gateways ... Eu tenho dois arquivos:

Arquivo 1 ( ip.txt ): contém os endereços IP dos gateways --- > Esses arquivos são atualizados a cada mês.

Arquivo 2 ( cmd.txt ): contém comandos para alterar a configuração no gateway --- > Isso também é atualizado de tempos em tempos.

Até agora eu tenho dois scripts ......

Script 1, por exemplo, script1.sh : Basicamente, o script1 está lendo os IPs do gateway e os impede de esperar que o script faça o login no Gateway.

#!/bin/sh
for device in 'cat /home/ip.txt';do
./step_3 $device;
done

Segundo script

#!/bin/expect -f

set IP [lindex $argv 0]

spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@$IP

expect "password: "

send "difficult123\r"

expect "GBU_0:"

send "su -\r"
expect "Password: "

send "verydifficult123\r"

expect "GBI_0:"

send "/17.1/bin/cli.exe\r"

expect "USERNAME : "

send "GOOR\r"

expect "PASSWORD : "

send "DIFFICULT123\r"

expect "] "
****************** POINT 1 - Only One Change command shown -- I have multiple commands here to insert-----

send "CHG-MEM:SEV=CRITICAL;\r"

expect "(Y/N) :"

send "Y\r"

expect "]"
******************** POINT 2

send "exit\r"

expect "0:~> "

send "exit\r"

expect "logout"

send "exit\r"

expect "closed"

expect eof

Se eu código duro esperar comandos b / w Point 1 e 2, então tudo funciona como um encanto (eu tenho vários comandos) ... Como posso chamar o comando wait b / w Point 1 e 2 do arquivo ... ou seja, não desejo codificar os comandos dentro, mas sim em um arquivo separado para que o usuário possa atualizar o arquivo de comandos sem tocar no script e executá-lo ..... passar IP para esperar script funciona muito bem ... Eu não tenho certeza se eu posso passar esperar o comando do arquivo também.

    
por aavam 15.08.2017 / 01:43

1 resposta

1

O TCL pode facilmente incluir e executar comandos de algum outro arquivo; o comando source(n) , por exemplo, permite dizer

#!/usr/bin/env expect

package require Tcl 8.5

set IP [lindex $argv 0]
set include_file [lindex $argv 1]

# ... begin commands before here

catch {source $include_file} result options
if {[dict get $options -code] != 0} {
    puts stderr "could not source $include_file: $result"
    exit 1
}

# end commands after here ...

com isso salvo como runner , um pode ter um arquivo de inclusão

$ cat runthese 
puts a
puts b
puts c
$ expect runner 127.0.0.1 runthese
a
b
c
$ 

embora, é claro, o runthese ou qualquer arquivo a ser incluído possa ter send e expect , conforme necessário.

    
por 15.08.2017 / 02:55