次の機能を達成するためのクリーンな方法は何ですか?
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