2020-10-24 关于shell脚本中嵌套expect中的转义问题

关于shell脚本中嵌套expect中的转义问题

cat bat-ssl-run.sh 
#!/bin/bash

function auto_scp() {
local file=$1
local user=$2
local user_pwd=$3
local ip=$4

expect<<EOF
set prompt "(%|#|\\\\\$) \$" ;# default prompt

set timeout -1
spawn scp $file $user@$ip:~
expect {
	"yes/no" { send "yes\r"; exp_continue  }
	"*assword:" {send "$user_pwd\r"; exp_continue }
	100% { send_user "\r********************文件传送完成********************\r"; exp_continue }
	-re \$prompt	{ send_user "\r********************其实这句不会用到********************\r" }	
}
EOF
}

auto_scp testfile root rootpwd@123 192.168.71.144
注意
1.expect<<EOF后面的不能接收参数 [lindex argv 0] [lindex argv 1],所以原先这种形式
set a [lindex $argv 0]
的传参,需要放到expect<<EOF的前面,使用shell的方式传参

2.expect<<EOF 外部设置的变量,可以直接解析,但是内部set设置的变量,需要在变量使用时,把$转义成为\$
3.原先在expect中表示shell提示符用
set prompt "(%|#|\\$) $" ;# default prompt
在expect<<EOF内部,\和$都需要转义,其中
\转义为\\
$转义为\$
所以\\$就要转义成\\\\\$
以上变量设置变为:
set prompt "(%|#|\\\\\$) \$" ;# default prompt
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值