如何在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
相关产品推荐
相关产品推荐

