在 Expect 脚本中处理多个生成的进程

问题描述 投票:0回答:1

这是我的 Expect 脚本的用例(我拥有的少数几个之一)

我想通过 ssh 运行多个

sed
命令。它就像预构建环境设置一样。 我想运行这样的东西:-

#!/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
命令。第一和第二将被跳过。

我错过的隐藏宝石是什么?

这是我到目前为止所看到的,但没有帮助

expect
1个回答
2
投票

您实际上并不需要多个(意味着并行

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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.