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

如何在Shell脚本中同时向C++程序传递命令行参数与标准输入?

解决方法:给带命令行参数+交互式输入的程序写自动化Shell脚本

我明白你现在的困扰——要给既有命令行参数、又需要后续交互式输入的C程序写自动化脚本,还不能修改原程序对吧?别担心,有几种简单可靠的方法可以搞定,完全不需要改动你的C代码:

方法1:用Here文档(Here-document)传递输入

这是最直观也最常用的方式,能同时传递命令行参数和预设的交互式输入:

#!/bin/bash
# 先传命令行参数arg1、arg2,再用Here文档提供后续输入
./myprogram arg1 arg2 << EOF
第一个预设输入值
第二个预设输入值
第三个预设输入值
EOF

说明:

  • << EOF 是Shell的Here文档标记,它会把后面直到**单独一行的EOF**的所有内容,作为标准输入传给myprogram
  • 程序会先正常接收arg1和arg2这两个命令行参数,执行完第一个任务后,就会自动读取Here文档里的预设输入,继续执行后续任务
  • 注意:结束标记EOF必须单独占一行,前后不能有任何空格或其他字符,否则Shell会识别失败

方法2:用管道结合printf/echo传递输入

如果你的预设输入内容比较简短,也可以用管道把输入内容直接传给程序,同时保留命令行参数:

#!/bin/bash
# 用printf输出多行预设输入,通过管道传给程序
printf "输入值1\n输入值2\n输入值3\n" | ./myprogram arg1 arg2

或者用echo -e来支持换行转义:

#!/bin/bash
echo -e "输入值1\n输入值2\n输入值3" | ./myprogram arg1 arg2

说明:

  • 管道|会把左边命令的输出,作为右边程序的标准输入
  • 程序依然会先接收arg1和arg2,等需要读取用户输入时,就会读取管道过来的预设内容

方法3:临时文件重定向输入

如果你的预设输入内容非常复杂,或者需要重复使用,可以先把输入内容写到临时文件,再通过重定向传给程序:

#!/bin/bash
# 先把预设输入写入临时文件
cat > temp_input.txt << EOF
复杂输入内容1
复杂输入内容2
甚至可以包含多行文本或者特殊字符
EOF

# 运行程序,重定向标准输入到临时文件
./myprogram arg1 arg2 < temp_input.txt

# 可选:用完临时文件后删除它
rm temp_input.txt

说明:

  • < temp_input.txt 会让程序从这个文件里读取标准输入,效果和手动输入完全一致
  • 这种方式适合输入内容需要维护、或者包含特殊格式的场景

注意事项

要确保你的C++程序是从**标准输入(stdin)**读取用户输入的(比如用cin、getline()、getchar()这些标准方法)。如果程序是直接读取终端设备(比如硬编码读取/dev/tty),那上面的方法会失效——不过这种写法在普通程序里很少见,绝大多数情况都没问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:41:20