Обработка нескольких процессов Spawn в сценарии ожидания

Вот мой пример использования сценария ожидания (один из немногих, которые у меня есть)

Я хочу запустить несколько команд sed через ssh. Это похоже на предварительную настройку среды. Я хочу запустить что-то вроде этого: -

#!/usr/bin/expect
set timeout -1

spawn -noecho bash -c "ssh -t user@host 'sed -i <some_stuff1> <file1>'"
spawn -noecho bash -c "ssh -t user@host 'sed -i <some_stuff2> <file2>'"
spawn -noecho bash -c "ssh -t user@host 'sed -i <some_stuff3> <file3>'"

expect {
  -re ".*sword.*" {
     exp_send "$env(PASS_WORD)\n"
     exp_continue
  }
}

Но будет выполнена только последняя sed команда. 1-й и 2-й будут пропущены.

Что может быть скрытой жемчужиной, которую мне не хватает?

Вот то, что я смотрел до сих пор, но не помогло

Обработка нескольких операторов в сценарии ожидания

Сценарий ожидания: как обрабатывать два процесса?

Одновременная обработка нескольких процессов — онлайн-книга Safari


person mihir6692    schedule 15.03.2017    source источник


Ответы (1)


Вам не нужно несколько (означает параллельно) spawn здесь.

#!/usr/bin/expect

set timeout 60

set cmds [list "ssh host1 ..." "ssh host2 ..." "ssh host3 ..."]

foreach cmd $cmds {
    spawn -noecho bash -c $cmd
    expect {
        -nocase "password" {
            exp_send "$env(PASS_WORD)\r"
            exp_continue
        }
        eof { wait } ; # at this time the last spawn'ed process has exited
    }
}
person pynexj    schedule 16.03.2017