screen: 別の設定でセッションを自動的に作成または再接続します。

screen: 別の設定でセッションを自動的に作成または再接続します。

次の機能を達成するためのクリーンな方法は何ですか?

function screen_create_or_reuse(){
if [ running_screen_session "$1" ]; then
    reattach_screen_session screen_name_"$1"
else
    create_screen_session "$1" screen_config_"$1" screen_name_"$1"
fi
}

screen -ls現在のセッションが既に実行されているかどうかを心配する必要がありますscreen -wipe。これにより、実行されない場合は、カスタム構成と名前を使用してセッション()を手動で作成し、手動でscreen -c config -S name再接続します。私はscreen_create_or_reuse nameこれらの詳細をすべて処理できるコマンドが欲しいです。

セッションなどの存在を検出するためにbashスクリプトを作成しようとしましたが、画面にすでに多くのオプションがあることを見ると、あまりにも遠くに行くことがあります。

画面を使って上記を達成するためのきれいな方法は何ですか?

答え1

次のオプションは次のとおりですman screen

   -d -R   Reattach a session and if necessary detach or even create it first.

これを使用して-Sセッション名を設定します。

答え2

ほとんどの場合、-S foo -d -RR目的の操作を実行します。つまり、指定した名前でセッションに接続し、セッションがまだ存在しない場合はセッションを作成します。

私はさらに一歩進んで、名前別のプロフィールを見つけるのが好きです。これにより、さまざまなセッション名、実行アプリケーションなどにさまざまな環境変数を定義できます。

etc/screen/0.screenrc以下は、別のセッション固有の構成ファイルからインポートされた私のファイルです。

source ~/.screenrc
unsetenv DISPLAY
msgminwait 0
msgwait 0
screen -t post_initialization 39 sh -c 'sleep 1; screen -X msgwait 5; screen -X msgminwait 1'

etc/term/emacs.screenrc以下は、Emacsを実行するウィンドウを起動するセッション固有の設定ファイルの例です(複数の端末に接続できるEmacs 23ではこれ以上役に立ちません)。

sessionname emacs
source 0.screenrc
screen -t emacs emacs -nw

以下は、これらのセッションを呼び出すために使用するスクリプトの修正バージョンです。scr emacs上記のセッションを選択するには、たとえばこれを呼び出します。セッション名に対応する設定ファイルがない場合は、~/etc/screenシェルを実行します。

#!/bin/sh
session_name=$1; shift
if [ -r "$HOME/etc/screen/$session_name.screenrc" ]; then
  exec screen -S "$session_name" -d -RR -c "$HOME/etc/screen/$session_name.screenrc" "$@"
else
  if [ $# -eq 0 ]; then set "$SHELL"; fi
  exec screen -S "$session_name" -d -RR -c "$HOME/etc/screen/0.screenrc" "$@"
fi

関連情報