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

Bash脚本执行完自定义函数后无法自动退出需手动按回车问题

问题根因
  • 脚本中所有foo函数调用都通过&放到后台执行,但主脚本未添加wait指令等待所有后台子进程运行结束,主进程会在启动完所有后台任务后直接退出,此时后台任务的输出(如Done $i日志)会冲掉已经打印的shell提示符,视觉上呈现出脚本未退出的假死状态,按下回车会触发shell重新打印提示符,就表现为需要手动按回车才能结束。
  • 后台运行的prokka命令如果存在读取标准输入的逻辑,会因为后台进程无法获取用户输入进入挂起状态,也会导致进程无法正常结束。
修复后的脚本
#!/bin/bash

PATH=/opt/conda/bin:$PATH
export PATH

eval "$(conda shell.bash hook)"
# 环境激活失败直接退出,避免后续执行报错
conda activate prokka_env || exit 1

foo () {
    local i=$1
    # 重定向标准输入为空,避免后台运行时读取输入挂起,变量加引号兼容带空格的文件名
    prokka "$i" --outdir ./"${i%.*}" --prefix "${i%.*}" < /dev/null
    echo "Done $i"
}

for i in *.fasta; do 
    foo "$i" & 
done
# 等待所有后台子进程全部执行完成后,主脚本再退出
wait
验证说明

修改后运行脚本,所有fasta文件处理完成、所有Done $i日志打印完成后,主脚本会自动退出并正常返回shell提示符,无需手动敲击回车。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:45:03