You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

命令添加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 17:52:04