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
相关产品推荐
相关产品推荐

