如何在Bash脚本中等待C程序执行完成后清理可执行文件
解决Bash脚本运行交互型C程序的问题
你的脚本核心问题是没运行编译好的可执行文件,而且PID获取逻辑完全错误。以下是修正后的可行方案:
修正后的脚本
#!/bin/bash echo "C PROGRAM STARTED" # 编译程序,若编译失败直接退出脚本 if ! make -f Makefile all; then echo "编译失败,退出脚本" exit 1 fi # 运行生成的可执行文件(根据你的make输出,可执行文件名为ptf) ./ptf # 程序运行结束后执行清理 echo "END OF PROGRAM" make -f Makefile clean
关键说明
- 编译完成后必须手动执行可执行文件
./ptf,原脚本只完成了编译步骤,直接跳到了清理,所以没给用户输入交互的机会。 - 前台运行
./ptf时,脚本会自动阻塞等待程序结束——直到用户完成所有输入、程序输出结果并退出后,脚本才会继续执行后续的清理命令,完全不需要while循环或sleep。 - 加入
if ! make ...的判断是为了处理编译失败的情况,避免后续尝试运行不存在的可执行文件。
澄清之前的误解
- 不需要while循环:前台运行程序时,脚本执行是串行的,进程结束前后续命令不会执行,无需额外循环判断。
- 不需要sleep:脚本会自动等待交互型程序完成所有输入输出并退出,不用预估用户输入耗时。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

