各ウィンドウのscreenrcサブシェル

各ウィンドウのscreenrcサブシェル

.screenrc:

shell -${SHELL}
caption always "%n(%t) %= %{b}@%H[%l] : %{r}%c:%s"
termcapinfo xterm ti@:te@
termcap  xterm 'AF=\E[3%dm:AB=\E[4%dm'
terminfo xterm 'AF=\E[3%p1%dm:AB=\E[4%p1%dm'
startup_message off

screen -t server 0 rails s
screen -t spork 1 bundle exec spork
screen -t dev_log tail -f ./log/test.log

上記の画面ウィンドウのいずれかでCtrl + Cを押すと、そのウィンドウが削除されます。それぞれにサブシェルがありたいので、Ctrl + Cを押すとそのサブシェルで終了します。

今すぐ手動で実行しscreen、上記のすべてのウィンドウを作成して名前を変更すると、うまく動作します。任意のウィンドウで任意のプログラムを終了し、他のタスクを実行して再度実行できます。私が達成したいのは、1つのコマンドで設定を実行することだけです。

答え1

別の関連質問を作成することにしました。コマンドが実行された後でもBashを実行し続けるには?大きな絵は忘れて、主な問題に集中してください。期待どおりに作業し、ついに目標を達成するための3つの方法を考えました。

  1. 解決策悪くない
  2. 持ち運べる(POSIX)
  3. シンプル

私は次のように3番目のものを使用することにしました。

~/.run_screen:

#!/bin/bash
/bin/bash -i <<<"$*; exec </dev/tty"

~/.screenrc:

screen -t server 1 ${HOME}/.run_screen rails s
screen -t spork 2 ${HOME}/.run_screen bundle exec spork
screen -t dev_log 3 ${HOME}/.run_screen tail -f ./log/development.log
screen -t test_log 4 ${HOME}/.run_screen tail -f ./log/test.log
screen -t bash 0  

答え2

アプリケーションが完了したら、サブシェルの代わりに新しいサブシェルを開くのはどうですか?

screen -t htop bash -i -c "htop && bash"

関連情報