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

如何捕获命令行提示内容为不可修改的sh脚本自动应答

解决方案

原有代码的问题

  • 语法逻辑错误:Shell 中判断 grep 是否匹配到内容的正确写法是添加 -q 参数直接判断退出状态,你写的 command.sh | grep 'Force' =0 不符合 Shell 语法规范。
  • 单向管道无法处理双向交互:普通管道只能把前一个命令的标准输出传给后一个命令的标准输入,无法实现「先读取目标脚本输出的提示,再把对应应答传给目标脚本的标准输入」的双向交互逻辑。
  • 交互提示捕获失败:大部分脚本的交互提示默认输出到标准错误流(stderr),普通管道默认只会传递标准输出流(stdout),因此 grep 根本抓不到提示内容。
  • 无终端环境兼容问题:crontab 运行环境没有关联伪终端,很多依赖终端的交互脚本会直接卡住或报错。

推荐方案:使用 expect 实现自动应答

expect 是专门用于交互式程序自动应答的工具,完美适配你的需求。

第一步:安装expect

# Debian/Ubuntu 系
apt update && apt install -y expect

# RHEL/CentOS 系
yum install -y expect

第二步:编写自动应答脚本

新建脚本文件 auto_respond.exp,内容如下:

#!/usr/bin/expect -f
# 替换为你的目标脚本绝对路径
set target_script "/absolute/path/to/command.sh"

# 启动目标脚本
spawn $target_script
# 设置超时时间10秒,避免脚本异常卡住
set timeout 10

# 匹配输出的提示文本,返回对应应答
expect {
    "*Force*" {
        send "Force\r"
        exp_continue
    }
    "*Yes*" {
        send "Yes\r"
        exp_continue
    }
    timeout {
        puts "脚本执行超时"
        exit 1
    }
    eof
}

第三步:配置执行权限和crontab

# 给脚本加执行权限
chmod +x /absolute/path/to/auto_respond.exp

在 crontab 中直接配置该 expect 脚本即可,比如每分钟执行的配置:

* * * * * /absolute/path/to/auto_respond.exp >> /var/log/command_run.log 2>&1

注意事项

  • 所有路径请使用绝对路径,避免 crontab 环境变量问题导致找不到文件。
  • expect 匹配规则支持通配符 *,如果提示文本有特殊字符可以调整匹配规则保证命中。
  • 如果目标脚本有多轮交互,可以在 expect 块中新增对应的匹配规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:05