如何在脚本中携带密码执行pbrun命令?现有Expect脚本报错
解决pbrun自动输入密码的Expect脚本问题
你的脚本报错核心原因是没有用spawn命令启动pbrun进程——Expect只能捕获通过spawn启动的子进程的输入输出,直接执行命令的话,Expect无法监听对应进程的输出流,才会出现“expect key not found”错误。
下面是修正后的脚本,同时适配你删除文件的需求:
#!/usr/bin/expect -f # 用spawn启动pbrun进程,这是关键 spawn pbrun ehuid # 匹配密码输入提示(如果实际提示不是"Password: ",请替换成真实文本) expect -exact "Password: " # 发送密码,末尾必须加\r模拟回车,否则密码不会被提交 send -- "你的实际密码\r" # 等待目标shell的提示符(匹配$符号及后续空格) expect -re {\$\s*} # 发送删除文件的命令,替换成你要删除的真实路径和文件 send -- "rm /你要删的文件路径/目标文件*\r" # 可选:如果需要留在交互shell,用interact;如果执行完退出,用下面两行 expect -re {\$\s*} send -- "exit\r" expect eof
额外注意事项:
- 如果密码里包含特殊字符(比如
\、$、!),需要用反斜杠转义,或者把密码放在双引号里处理 - 更安全的做法是不要明文写密码:可以通过环境变量传递,比如脚本里用
set passwd $env(PBRUN_PASS),然后send "$passwd\r",执行脚本前先运行export PBRUN_PASS=你的密码 - 一定要确认pbrun实际的密码提示文本,比如有些环境会显示"Enter password: ",必须和
expect后的字符串完全匹配(包括空格和标点)
内容的提问来源于stack exchange,提问作者rakesh kandukuri
相关产品推荐
相关产品推荐

