在 Linux 上写自动化脚本时,用expect搞多台机器的多会话切换,真的还挺爽的。你可以一口气用spawn连好多台机器,用spawn_id把每个会话记下来,想切谁就切谁,控制力强。配合bash来写,命令清晰,结构也好维护,尤其适合那种密码登录还没免密配置的环境。

多会话管理靠保存每个连接的spawn_id,比如set spid_ssh1 $spawn_id就把会话 1 保存起来,想切过去就set spawn_id $spid_ssh1,再send命令就行,操作起来像开了外挂。嗯,不过要注意,bash里不能像 Tcl 那样用send -i发命令,得靠切换spawn_id搞定。

expect {"password:" { send "888\n" }}这种就典型,登录远程机输密码,用expect_out还能把匹配到的内容提取出来做逻辑判断,灵活性不错。用正则监听输出,比如expect -i $spid_ssh1 -re "parafs"这种也实用,常用来做状态判断或者日志。

整体来说,expect + bash是玩远程控制和多会话的利器。如果你经常需要批量登录、发命令,或者做跨主机自动化操作,这种写法值得一试,尤其在不能免密登录的场景下,稳定又省心。