使用exp的时候,经常需要传密码给脚本,但是如果直接通过传参的方式传递,会有通过ps打印的风险,因此需要使用管道符来避免别人通过ps获取敏感信息。
在shell脚本中:
echo $PASSWORD1 $PASSWORD2 | expect -f expectFile.exp $ARG1 $ARG2 >> LOG.FILE
更新:通过管道符依旧存在可能被ps打印的风险(会创建子线程),需要使用<<<重定向密码给expect命令以达到安全要求
在EXP脚本中:
#读取用户输入
expect_user -re "(.*)\n"
#将用户输入从buffer中取出
set pwd_line $expect_out(1,string)
#多个密码需要分割
set pwds [split "pwd_line" " "]
set PASSWORD1 [lindex $pwds 0]
set PASSWORD2 [lindex $pwds 1]
#获取参数:
set ARG1 [lindex $argv 0]
set ARG2 [lindex $argv 1]
#获取参数长度:
set arg_len [llength $argv]```
----
上面使用到的expect_out可以理解为缓存
$expect_out(0,string)匹配整个正则表达式的字符串
$expect_out(1..9,string) 匹配正则表达式模式中第1-9个()中的内容
上文使用(.*)\n匹配的是回车前所有输入,第一个模式匹配的就是除回车符之外的所有输入