如何自动向需两次密码输入的命令行程序传入密码
如何实现两次密码输入的自动化操作?
场景说明
运行Oracle钱包创建命令mkstore -wrl -create时,程序要求用户连续输入两次密码完成确认。
单次密码输入场景下,直接通过管道传递密码即可正常运行:
echo 'dummypassword' | mkstore -wrl -create
但面对两次密码输入要求时,连续拼接两个echo管道的写法无法生效:
# 错误写法,执行后无法通过两次密码校验 echo 'dummypassword' | echo 'dummypassword' | mkstore -wrl -create
这种写法失效的核心原因是管道按顺序串行传递数据流:第二个echo命令本身不会读取标准输入内容,只会输出自身传入的参数字符串,最终传递给mkstore的只有一行密码,自然无法满足两次输入的要求。
可直接复用的实现方案
- 方案1:单条echo输出多行密码传递
两次密码输入本质是程序连续读取两行标准输入内容,只需要把两个密码用换行符拼接后一次性传入即可:
如果两次需要输入不同内容,直接替换换行符前后的字符串即可。# 两次输入密码相同的场景 echo -e 'dummypassword\ndummypassword' | mkstore -wrl -create - 方案2:使用
yes命令自动重复输出密码yes命令的作用是持续重复输出指定字符串,直到被管道连接的后续程序终止,不需要手动统计需要输入的次数,哪怕程序要求3次、4次相同输入都能自动适配:yes 'dummypassword' | mkstore -wrl -create - 方案3:用
expect适配复杂交互式场景
如果密码输入流程有特殊提示文案、两次输入内容不一致、或者交互逻辑更复杂,可以用expect工具专门做交互式命令的自动化控制:# 先安装expect(yum系发行版用如下命令,其他包管理器对应替换安装命令即可) yum install -y expect # 直接执行自动化交互逻辑 expect -c " spawn mkstore -wrl -create expect \"Enter password:\" send \"dummypassword\r\" expect \"Confirm password:\" send \"dummypassword\r\" expect eof "注意:使用时需要把
expect后面匹配的提示文本,替换为你本地实际运行命令时弹出的真实提示文案,否则会因为匹配不到提示卡住无法继续执行。
内容的提问来源于stack exchange,提问作者batuhan kırçova
相关产品推荐
相关产品推荐

