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

Ubuntu嵌套Bash脚本多终端执行无输出问题求助

主脚本调用gnome-terminal执行子脚本无输出的问题

我想通过单个主脚本简化程序运行流程,用它打开多个终端窗口并在每个窗口执行独立子脚本。但运行主脚本后,子脚本进程看似在后台运行(关闭终端时会提示有进程),但终端窗口里完全没有输出内容。我已经简化了代码来定位问题。

主脚本 main_script.sh 内容

echo "run my program"
gnome-terminal -- ~/Path/To/program_script_1.sh
sleep 2
gnome-terminal -- ~/Path/To/program_script_2.sh

子脚本内容

program_script_1.sh

bash
conda activate MyEnv
echo "do the first thing"
sleep 1
echo "done"

program_script_2.sh

bash
conda activate MyEnv
echo "do the second thing"
sleep 1
echo "done"

所有脚本都在同一目录下。运行主脚本后,主脚本本身执行正常,但打开的子脚本终端窗口没有任何输出。我猜测问题出在子脚本里调用的bash命令上,而我原本加这个是为了加载conda环境。运行后遇到的现象:

  • 子脚本终端窗口无任何文本输出
  • 关闭终端时提示有后台进程在运行

问题原因与解决办法

问题根源就是子脚本里的bash命令——它会启动一个新的交互式bash shell,这个新shell会接管当前终端的输入输出,而后续的conda activate、echo等命令都在原来的shell进程里等待这个新shell退出后才会执行,所以终端窗口里看不到任何输出(因为新shell一直在前台运行,没有机会执行后面的命令)。

要加载conda环境并正常执行后续命令,不需要额外调用bash,可以用以下两种方式修改:

方式1:修改子脚本,直接加载conda初始化脚本

如果你的conda没有在shell里自动初始化,可以在子脚本开头手动加载conda的初始化文件,示例:

# 根据你的conda安装路径调整,默认miniconda路径示例
source ~/miniconda3/etc/profile.d/conda.sh
conda activate MyEnv
echo "do the first thing"
sleep 1
echo "done"
# 可选:执行完成后保持终端窗口不关闭
exec bash

方式2:在主脚本中直接指定终端执行的命令

也可以直接在主脚本里定义gnome-terminal要运行的完整命令,不需要单独子脚本:

echo "run my program"
gnome-terminal -- bash -c "source ~/miniconda3/etc/profile.d/conda.sh && conda activate MyEnv && echo 'do the first thing' && sleep 1 && echo 'done' && exec bash"
sleep 2
gnome-terminal -- bash -c "source ~/miniconda3/etc/profile.d/conda.sh && conda activate MyEnv && echo 'do the second thing' && sleep 1 && echo 'done' && exec bash"

关键说明

  • exec bash是为了在命令执行完成后保持终端窗口不关闭,方便查看输出;如果不需要保留窗口,可以去掉这部分。
  • 确保conda初始化脚本路径正确,不同conda版本(miniconda/anaconda)的路径可能略有不同,可通过which conda找到安装目录,再定位到etc/profile.d/conda.sh。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:35:44