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

シェル スクリプトで同時に 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 4149またはscreen -r name1を実行します。

于 2013-07-11T02:25:32.973 に答える
0

すぐに次の 2 つのことがわかります。

  1. screen コマンド引数で改行をエスケープするために必要なバックスラッシュがありません。
  2. バックグラウンドで実行するように画面に指示する必要があります。-dおよび-mオプションを参照してください。
于 2013-03-06T04:23:55.597 に答える