Linux(树莓派3)自启动脚本语法错误求助:排查与修复
树莓派Fluidsynth自启动脚本修复
错误原因
- 语法问题:
do:;中do与占位符:之间缺少空格,bash无法正确解析关键字与命令的分隔,触发语法报错。 - 逻辑顺序错误:原脚本先执行等待子shell,再启动fluidsynth,导致等待逻辑根本检测不到目标进程,完全无效。
修复后的脚本
#!/bin/bash # 后台启动fluidsynth fluidsynth -a alsa -g 5 /usr/share/sounds/sf2/FluidR3_GM.sf2 & # 等待最多5秒,直到fluidsynth进入就绪状态(进程状态为S) STOP=$((SECONDS + 5)) until [[ $SECONDS -ge $STOP || $(ps -C fluidsynth -o stat= 2>/dev/null) =~ ^S ]]; do sleep 0.1 # 减少空循环占用CPU资源 done # 仅当fluidsynth就绪时执行aconnect if [[ $(ps -C fluidsynth -o stat= 2>/dev/null) =~ ^S ]]; then aconnect 20:0 128:0 fi
关键调整说明
- 调整执行顺序:先后台启动fluidsynth,再执行等待逻辑,确保能检测到目标进程。
- 修复语法:给
do和:之间添加空格,让bash正确解析命令结构;用sleep 0.1替代空循环,降低CPU占用。 - 优化鲁棒性:在
ps命令后添加2>/dev/null,避免进程未启动时输出错误信息;增加就绪判断,确保aconnect仅在fluidsynth正常就绪后执行。 - 简化结构:去掉不必要的子shell嵌套,让脚本逻辑更清晰。
内容的提问来源于stack exchange,提问作者Roho
相关产品推荐
相关产品推荐

