命令添加STDOUT重定向后忽略infile输入的技术求助
问题分析与解决方案
这个问题的核心原因是:目标命令的安全机制会检测标准输出(STDOUT)是否为终端。当你把STDOUT重定向到文件时,命令会判定当前环境不是交互式终端,因此会忽略从标准输入(STDIN)传入的密码内容,转而强制要求从终端读取密码,这就导致了反复提示输入密码的问题。
可行解决方案
1. 使用script命令模拟终端环境
script命令可以创建一个伪终端,让目标命令误以为自己在交互式终端中运行,这样既可以捕获输出到文件,又能让命令接受STDIN的密码输入:
script -q -c 'command -p < pwd.file' out.file
-q:静默模式,不输出script的启动/结束提示-c:指定要执行的命令- 执行后,命令的输出会被写入
out.file,同时密码会从pwd.file正常读取。
2. 通过环境变量传递密码(如果命令支持)
很多需要密码的命令会提供环境变量传参的方式(避免终端交互),可以先查看命令的文档,确认是否有类似PASSWORD或对应命令的专属环境变量:
export PASSWORD=$(cat pwd.file) command -p > out.file
或者直接一行执行:
PASSWORD=$(cat pwd.file) command -p > out.file
3. 使用expect脚本自动交互
如果上述方法都不行,可以用expect脚本模拟终端输入密码的过程,确保命令能正确获取密码:
创建passwd_script.exp文件:
#!/usr/bin/expect spawn command -p > out.file expect "Password?" send "$(cat pwd.file)\r" expect eof
赋予执行权限并运行:
chmod +x passwd_script.exp ./passwd_script.exp
内容的提问来源于stack exchange,提问作者NeronLeVelu
相关产品推荐
相关产品推荐

