次のコマンドを使用してスクリーンセッションを作成しました。
screen -t name
この名前に基づいてこのセッションを再度開く方法はありますか(重複した名前がないと仮定)。
答え1
プロセスのリストを見る以外に他のオプションはないと思います。
screen -r $(pgrep -f '\<SCREEN.* -t name\>')
*BSDには他のものが必要です:
screen -r $(pgrep -t- -f '\<screen.* -t name\>')
オプションは、制御端末がないプロセスのみを一致させるように-t-
指示します。この場合、最初のリンク表示ではなくバックエンドプロセスのみが一致します(バックエンドプロセスをどこにでも変更しますが、* BSDでは文字列の変更は適用されません)。 Linuxと同様に、プロセスのリストにミラーリングされます。pgrep
screen
screen
argv[0]
"SCREEN"
argv
FreeBSDでは、-a
オプション(「呼び出しプロセスの親エントリも一致」)が必要になる場合があります。残念ながら、pgrep -t-
Linuxではサポートされておらず、pgrep -a
まったく異なる操作を行います。
したがって、すべてを関数に入れます。
# usage tscreen title [args ...]
tscreen(){
title=$1; shift
screen -r $(
pgrep -f "\\<SCREEN.* -t $title\\>" ||
pgrep -t- -f "\\<screen.* -t $title\\>" ||
pgrep -at- -if "\\<screen.* -t $title\\>" ||
echo "title=$title"
) "$@"
}
答え2
コマンドラインでセッション名を引数として使用するだけです。
screen -r SESSIONNAME
同じセッション名を持つ複数の画面がある場合は、次のようにPIDも指定する必要があります。
[jenny@sameen ~]$ screen -r test1
There are several suitable screens on:
23669.test1 (Detached)
23594.test1 (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
[jenny@sameen ~]$ screen -r 23669.test1
これは、RHEL7の画面4.01.00develとBSDの画面4.04.00で確認されました。