私は次のようなスクリプト(動作しません)を作成しました:
#!/bin/sh
screen -dmS "somename" somecommand
for i in {0..5}; do
screen -dmS "name$i" anothercommand $i
done
何らかの理由で、これをコピーして端末に貼り付けると、期待どおりに7つの切り離された画面セッションが作成されます。ただし、スクリプト内から実行すると、screen -ls
を実行すると、最初のセッション「somename」しか取得されません。
編集:同じことが別の方法で達成できる場合(たとえば、セッションの代わりに複数の画面ウィンドウを使用する場合)、それらのソリューションも開きます。ありがとう!
私はこの質問をStackOverflowに持ち込み、 Brian Gerard が質問に答えました。 {0..5}
ループ構文はbash(3.x +)固有です。デフォルトでは、私のシステムは/bin/sh
から他のシェルを実行するように設定されていたので、シャープバンを#!/bin/bash
に変更し、問題は解決しました。
なぜこれほど多くのスクリーンセッションを開く必要があるのですか?代わりに、単一の画面セッション内に複数のウィンドウ(つまり、単一画面のターミナルウィンドウの一部として)を作成してみませんか。作成した数と出力を表示する数に応じて、ctrl-a1または2または3などでそれらを切り替えることができます。
これは、画面を実行するための悪いアプローチのように聞こえます。画面に複数のウィンドウがあることを聞いたことがない場合は、Web上の画面にあるチュートリアルを読んでください。 Screenの主な設計目標は、ウィンドウの多重化です。これは、アタッチとデタッチだけではありません。
残念ながら、私はあなたの コメント に答えることができません。私は評判が低すぎるので、別の答えに入れなければなりません。
screenrc
構成ファイルを使用して、複数のウィンドウで単一画面のセッションを作成できます。 画面のマンページ はすべてを教えてくれますが、問題を解決するために必要な最も重要なことは次のとおりです。
次のscreenrcは、2つのウィンドウを持つ画面セッションを作成します。 1つのウィンドウはbash
を実行し、もう1つのウィンドウはpython
を(インタラクティブに)実行します。
sessionname myscreensession
screen -t command1 0 bash
screen -t command2 1 python
名前myscreensessionは、screen -ls
を実行するときに表示され、screen -r
のパラメーターとして使用できます。文字列commandNは、画面セッション内のウィンドウ名を指定します。番号(0と1)は、コマンドを実行するウィンドウを指定します(後続の番号を使用する必要はありません)。
後で、実行中の画面セッションに新しいコマンドを含む別のウィンドウを追加することもできます。と:
screen -X screen -S myscreensession -t command3 2 python3
これにより、既存のセッションでpython3
を実行する新しいウィンドウが作成されます。
スクリプトが機能しない理由はよくわかりませんが、複数の画面セッションを開始する別の方法は、カスタム画面構成ファイルを作成することです。このAskUbuntuの質問で議論されました: https://askubuntu.com/questions/49245/start-multiple-apps-running-in-shells-split-in-one-console
次の内容で設定ファイルtest.confを作成し、screen -d -c test.conf
を起動するだけでよいと思います。
screen -S "somename" somecommand
screen -S "name1" anothercommand 1
screen -S "name2" anothercommand 2
...
そしてそれが機能する場合、スクリプトは最初にこのtest.confファイルを作成し、ループ内でそれをカスタマイズすることができます
echo "screen -S "name$i" anothercommand $i" >> test.conf
次に、スクリプトの最後でscreen -d -c test.conf
を開始します。