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

GNU Screen脚本拆分终端为5个窗口失败求助

问题:无法通过脚本或screenrc自动拆分5个终端窗口

我尝试用bash脚本或screenrc配置文件,通过split -v、split -h或screen -X split -v命令自动将终端拆分成5个窗口,但要么崩溃要么毫无反应。我不想用快捷键拆分,希望直接在执行文件中实现。

以下是我当前使用的脚本和配置文件:

当前script.sh脚本

sudo podman network create podman
sudo podman login xxxxx

rabbitmq="docker.io/rabbitmq:latest"
podman1="xxxxx"
podman2="xxxxx"
podman3="xxxxx"
podman4="xxxxx"

sudo podman pull $rabbitmq $podman1 $podman2 $podman3 $podman4
sudo podman stop -i $rabbitmq $podman1 $podman2 $podman3 $podman4

SCREENS_TEST=$(sudo screen -ls | grep run_screen | wc -l)
if [ $SCREENS_TEST -eq 0 ]
then
    sudo screen -m -dS run_screen -c .screenrc 
else
    sudo screen -S run_screen -X quit
    sudo screen -m -dS run_screen -c .screenrc
fi

sudo screen -S run_screen -x -X screen -t rabbitmq bash -c "sudo podman run -it --rm --name rabbitmq --network podman --hostname rabbitmq -p 5672:5672 $rabbitmq"
sudo screen -S run_screen -x -X screen -t podman1 bash -c "sudo podman run --rm -it --env-file=attributs.env $podman1"
sudo screen -S run_screen -x -X screen -t podman2 bash -c "sudo podman run --rm -it --env-file=attributs.env $podman2"
sudo screen -S run_screen -x -X screen -t podman3 bash -c "sudo podman run -it --rm --env-file=attributs.env -p 8000:80 $podman3"
sudo screen -S run_screen -x -X screen -t podman4 bash -c "sleep 15 && sudo podman run -it --rm --env-file=attributs.env $podman4"

sudo screen -r run_screen

当前.screenrc配置文件

vbell off
scrollback 10000
term xterm-256color
nonblock 5
shell -${SHELL}
caption always "%3n %t%? @%u%?%? [%h]%?%=%c"
startup_message off
bind ' ' windowlist -b

解决方案

你的脚本仅创建了5个screen标签窗口,但未执行终端拆分(pane分割)操作。split命令需要针对当前活动pane执行,且拆分后需切换到新pane才能创建对应任务窗口。以下是修复后的脚本:

修复后的自动拆分脚本

sudo podman network create podman
sudo podman login xxxxx

rabbitmq="docker.io/rabbitmq:latest"
podman1="xxxxx"
podman2="xxxxx"
podman3="xxxxx"
podman4="xxxxx"

sudo podman pull $rabbitmq $podman1 $podman2 $podman3 $podman4
sudo podman stop -i $rabbitmq $podman1 $podman2 $podman3 $podman4

# 清理旧会话
SCREENS_TEST=$(sudo screen -ls | grep run_screen | wc -l)
if [ $SCREENS_TEST -ne 0 ]
then
    sudo screen -S run_screen -X quit
fi

# 创建后台会话
sudo screen -m -dS run_screen -c .screenrc

# 初始化第一个窗口(rabbitmq)
sudo screen -S run_screen -X screen -t rabbitmq bash -c "sudo podman run -it --rm --name rabbitmq --network podman --hostname rabbitmq -p 5672:5672 $rabbitmq"
sudo screen -S run_screen -X select 0

# 垂直拆分出第二个pane,运行podman1
sudo screen -S run_screen -X split -v
sudo screen -S run_screen -X focus
sudo screen -S run_screen -X screen -t podman1 bash -c "sudo podman run --rm -it --env-file=attributs.env $podman1"

# 返回第一个pane,水平拆分出第三个pane,运行podman2
sudo screen -S run_screen -X prev
sudo screen -S run_screen -X split -h
sudo screen -S run_screen -X focus
sudo screen -S run_screen -X screen -t podman2 bash -c "sudo podman run --rm -it --env-file=attributs.env $podman2"

# 返回第二个pane,水平拆分出第四个pane,运行podman3
sudo screen -S run_screen -X prev
sudo screen -S run_screen -X prev
sudo screen -S run_screen -X split -h
sudo screen -S run_screen -X focus
sudo screen -S run_screen -X screen -t podman3 bash -c "sudo podman run -it --rm --env-file=attributs.env -p 8000:80 $podman3"

# 返回第三个pane,垂直拆分出第五个pane,运行podman4
sudo screen -S run_screen -X prev
sudo screen -S run_screen -X split -v
sudo screen -S run_screen -X focus
sudo screen -S run_screen -X screen -t podman4 bash -c "sleep 15 && sudo podman run -it --rm --env-file=attributs.env $podman4"

# 切换回初始窗口,连接会话
sudo screen -S run_screen -X select 0
sudo screen -r run_screen

关键注意点

  • split -v为垂直拆分,split -h为水平拆分,每次拆分后必须用focus切换到新pane,才能在其中创建任务窗口
  • select <num>用于切换到指定编号窗口,prev用于返回上一个pane
  • 若执行时出现崩溃,可在拆分/切换命令之间添加sleep 0.5延迟,避免命令发送过快导致screen处理异常
  • 无需修改现有.screenrc配置,保持原有设置即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:50:41