Chamando um script de espera em um loop de um script bash

4

Estou tentando fazer o loop de uma lista de sites por meio de um script de expectativa. O loop pegará minha lista e a lerá linha por linha, alterará os diretórios para a pasta do nome do site e passará o nome do site para um script de espera.

Script Bash:

#!/bin/bash
sites="/home/user/sites.cfg"

while read site; do
  cd /home/user/$site
  pwd
  echo $site
  ./base.sh
done < $sites

Espere o script:

#!/usr/bin/expect

set site [lindex $argv 0]
set timeout 3

logfile services
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -oUserKnownHostsFile=/dev/null user@$site
expect "password" { send mypassword\r }
expect "#"
send environment\ no\ more\n
expect "#"
send show\ service\ service-using\n
expect "#"
send logout\n

Resultado:

user@myserver:~$ sh show-database.sh
/home/user/site-01
site-01
show-database.sh: 11: show-database.sh: ./base.sh: not found
/home/user/site-02
site-02
show-database.sh: 11: show-database.sh: ./base.sh: not found

Espero ver um arquivo chamado services em cada pasta de cada site. Eu posso executar o seguinte e funciona a partir do CLI, no entanto, ele não alterna diretórios. Este é apenas o começo de um script muito maior, que terá mais algumas coisas para fazer no loop. Por enquanto, isso é o que tenho para testar.

./base.sh site-01

Obrigado!

    
por Pi4All 05.10.2015 / 21:50

1 resposta

5

Você não precisa do script de wrapper bash para isso, espera que possa lidar com tudo isso:

#!/usr/bin/expect
set timeout 3

set rootdir /home/user
set sites [file join $rootdir sites.cfg]
set fh [open $sites r]

while {[gets $fh site] != -1} {
    set dir [file join $rootdir $site]
    if { ! [file isdirectory $dir]} {
        puts "*** error: $dir does not exist"
        continue
    } 

    cd $dir
    puts [pwd]
    puts $site

    log_file services

    spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no -oUserKnownHostsFile=/dev/null user@$site
    expect "password" 
    send "mypassword\r 
    expect "#"
    send "environment no more\r"
    expect "#"
    send "show service service-using\r"
    expect "#"
    send "logout\r"
    expect eof

    log_file
}
    
por 05.10.2015 / 22:45

Tags