2013-03-06 54 views
2

有沒有一種方法可以並行運行?我可以手動啓動屏幕,但我需要啓動30. 我試圖手動(愚蠢是啊),但我中途變得困惑,並決定我最好問問stackoverflow。屏幕上unix的並行

#!/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 

回答

0

我看到兩件事情的時候了:

  1. 你缺少必要的反斜線逃避你的換行符在屏幕命令參數。
  2. 你需要告訴屏幕在後臺運行。請參閱-d-m選項。
+0

1.反斜線以逃脫我的換行符?你能否詳細說明一下?我不明白。 2. ah so -d -m創建一個屏幕但不附加它 - src http://www.slac.stanford.edu/comp/unix/package/epics/extensions/iocConsole/screen.1.html – SwimBikeRun 2013-03-06 18:04:17

+0

我的意思是當你有像'screen cmd ...'這樣的代碼時,bash將會把這個解釋爲一個調用來屏蔽沒有參數,然後調用cmd。你希望它是一回事,所以它必須在一行上,或者像'screen \ cmd ...'。 – 2013-03-07 03:53:37

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 

所以,當你做屏幕-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,你會做屏幕-r 4149屏幕 - r name1