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

终端带计时器程序需无延迟快速输入,现有方法失效求助

解决程序启动后无延迟输入已知内容的问题

我懂你遇到的麻烦了!你之前用./program; password的问题在于,分号;是等前一个命令完全退出后才执行下一个命令——也就是说,你的password命令是在程序已经结束之后才跑的,系统自然会提示“password不是命令”。而且如果程序的输出是定向到终端而非标准输出,普通管道可能也抓不到输出,这就导致你看不到耗时信息。

下面给你几个靠谱的解决方案,按场景选就行:

1. 最简单的方案:管道或Here字符串(适用于程序从标准输入读取的情况)

如果你的程序是从stdin(标准输入)读取内容,直接用管道把输入提前喂进去就行:

echo "your_password_here" | ./program

或者用更简洁的Here字符串语法:

./program <<< "your_password_here"

要是看不到程序输出,可能是输出跑到了标准错误流(stderr),可以把stderr重定向到stdout一起查看:

echo "your_password_here" | ./program 2>&1

2. 更可靠的方案:Expect脚本(适用于程序从终端读取的情况)

有些程序会直接读取终端设备(而不是stdin),这时候管道和Here字符串就不管用了——这时候得用expect工具来模拟终端交互,它能精准控制输入时机,还能保留程序的输出。

写一个简单的expect脚本:

#!/usr/bin/expect -f
# 启动目标程序
spawn ./program
# 这里可以根据程序的提示调整匹配规则,如果程序没有明确提示符,直接发送输入
expect {
    "Enter password:" { send "your_password_here\r" }  # 如果有提示符就匹配这个
    default { send "your_password_here\r" }             # 没有的话直接发送
}
# 保持交互,这样你就能看到程序的所有输出了
interact

保存为auto_input.exp,给它加执行权限:

chmod +x auto_input.exp

然后运行脚本就行:

./auto_input.exp

为什么之前的方法不行?

再帮你理清楚:

  • ./program; password:分号是顺序执行,必须等./program完全退出,才会执行password,这时候程序已经不在运行了,根本接收不到输入。
  • 普通管道/Here字符串:如果程序是直接读取终端(比如用getpass()这类函数),它会绕过stdin,所以这些方法就失效,这时候必须用expect模拟终端环境。

内容的提问来源于stack exchange,提问作者Chef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:40:14