2

有没有办法并行运行?我可以手动启动屏幕,但我需要启动 30 个。我试图手动完成(愚蠢的是)但我在中途感到困惑并决定我最好问 stackoverflow。

#!/bin/bash --login
  2
  3
  4
  5
  6   avida=~/avida/cbuild/bin/avida
  7   skeleton_dir=~/cse845/no_pred
  8 # wd=/mnt/scratch/cse845_avida/predator_sim
  9   wd=~/cse845/no_predator_editor_sim_wd
 10
 11 for i in {1..30}
 12 do
 13 screen
 14
 15 
 16   sim_num=${i}
 17   sim_dir=${wd}/sim_$sim_num
 18   mkdir $sim_dir
 19   cd $sim_dir
 20   cp ${skeleton_dir}/*.cfg ${skeleton_dir}/*.org ./
 21   $avida &> avida_log.txt
 22# Here I would like to do the equivalent of exiting screen manually, ^A, d
 23 done
4

2 回答 2

2

以下是如何在 shell 脚本中同时启动 3 个(-d -m 在后台启动它们)

screen -s "name1" -c ~/screen/name1.screenrc -d -m 
screen -s "name2" -c ~/screen/name2.screenrc -d -m 
screen -s "name3" -c ~/screen/name3.screenrc -d -m 

然后,您可以在 screenrc 文件中指定的每个屏幕中拥有可变数量的选项卡/窗口。(带-t)。

请参阅旨在与 emacs 配合使用的示例 screenrc 文件:https ://github.com/startup-class/dotfiles/blob/master/.screenrc

这是关于指定每个套接字的选项卡/窗口的唯一部分。

# 2.3) Autoload two screen tabs for emacs/bash.
screen -t emacs 0
screen -t bash 1

所以当你做screen -ls你会得到

There are screens on:
    4149.name1  (07/10/13 22:18:44) (Detached)
    4018.name2  (07/10/13 22:18:23) (Detached)
    3882.name3  (07/10/13 22:17:08) (Detached)
3 Sockets in /var/run/screen/S-yourid.

然后如果你想连接到 name1,你会做screen -r 4149screen -r name1

于 2013-07-11T02:25:32.973 回答
0

我马上看到两件事:

  1. 您缺少必要的反斜杠来转义屏幕命令参数中的换行符。
  2. 您需要告诉 screen 在后台运行。请参阅-d-m选项。
于 2013-03-06T04:23:55.597 回答