如何将很多命令交给expect命令?

How to hand over many commands into expect command?

我必须用 ssh 连接到服务器和 运行 很多命令。 据我所知,解决方案是这样的脚本

expect -c 'spawn -noecho ssh '"admin"@"server"' "sudo bash -c \"command1\"";
      expect "*assword:*"; send "'${user_password}'\r";
      expect eof'

重复了几次。但是我不想每次都连接

也许您知道如何 运行 command1 command2 ... 在一个连接中?

谢谢

从 man ssh 可以做到

ssh [user@]hostname [command]

您还可以通过管道命令并使用多个命令,如下所示:

ssh user@hostname "command1; command2; command3"

@SMA 也对,你可以在你的服务器上创建一个脚本并使用:

ssh user@hostname 'bash myscript.sh'

扩展@LittlePanic404 的回答:

ssh user@hostname "command1; command2; command3"

也可以换行写,可读性还不错。此外,使用 shell 引用的 heredocs,并使用环境将 shell 变量传递给 expect:

export user host password

expect << 'END_EXPECT'
    spawn -noecho ssh $env(user)@$env(host) {
        command1
        command2
        command3
    }
    expect "*assword:*" {send "$env(password)\r"}
    expect eof
END_EXPECT

请注意,expect 是一个 Tcl 扩展,Tcl 使用 {braces} 的方式与 shell 使用 'single quotes'

的方式相同