使用 expect 完成自动交互的3种方式

参考文档:Shell 编程 免交互 expect

expect脚本

编写以 #!/usr/bin/expect 开头的脚本,缺点是只能执行 expect 相关命令,不能执行 ls, pwd 等其他命令。示例:

#!/usr/bin/expect
set timeout 30
# 上传文件到服务器
spawn scp target/test-service.jar root@192.168.42.90:/root
expect "root@192.168.42.90's password: "
send "root\r"
expect eof
# 启动服务
spawn ssh root@192.168.42.90
expect "password: "
send "root\r"
expect "~]# "
send "java -jar test-service.jar\r"
expect "~]# "
send "exit\r"
expect eof
exit

shell 脚本嵌入 expect 命令

用 shell 脚本的好处是在 expect 前后可以执行其他的 shell 命令。有两种使用方式:

方式一:/usr/bin/expect << EOF

#!/bin/sh
./mvnw clean package
ls -l target/test-service.jar
/usr/bin/expect << EOF
  set timeout 30
  spawn scp target/test-service.jar root@192.168.42.90:/root
  expect "root@192.168.42.90's password: "
  send "root\r"
  expect eof
  # 启动服务
  spawn ssh root@192.168.42.90
  expect "password: "
  send "root\r"
  expect "~]# "
  send "java -jar test-service.jar\r"
  expect "~]# "
  send "exit\r"
  expect eof
EOF

方式二:expect -c

这种方式相当于把要执行的内容以字符串的形式传给 expect,所以中间的引号字符需要用 \ 转义。

#!/bin/sh
./mvnw clean package
ls -l target/test-service.jar
expect -c "
  set timeout 30
  spawn scp target/test-service.jar root@192.168.42.90:/root
  expect \"root@192.168.42.90's password: \"
  send \"root\r\"
  expect eof
  # 启动服务
  spawn ssh root@192.168.42.90
  expect \"password: \"
  send \"root\r\"
  expect \"~]# \"
  send \"java -jar target/test-service.jar\r\"
  expect \"~]# \"
  send \"exit\r\"
  expect eof
"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值