スクリーンセッション中かどうかを確認する方法は?


75

私はスクリーンセッションに今いるかどうかをどうにかして確認できますか?ctrl + dを押すとサーバーから切断されるか、単に現在の画面を閉じるかを判断するために必要です。ありがとう。

回答:


107

$STY変数(screenコマンドで設定された変数)を見ることができます。「」でない場合は、スクリーンセッションにいます。

私は画面にいます

$ echo $STY 
29624.pts-1.iain-10-04
$

私は画面にいない

$ echo $STY

$

12
これは、ローカルコンピューターで実行中のセッション内にいることを前提としています。画面を起動してから他の場所でSSHを実行した場合、これは機能しません。
デビッドマッキントッシュ

2
if test -n "$STY"; then printf "This is a screen session named '$STY'.\n"; else printf "This is NOT a screen session.\n"; fi
集計

2
@DavidMackintoshを他の場所にSSHで接続する場合、ctrl-Dを押すと「サーバーから切断されます」という質問が表示されます。
ワンブル

1
@ aggregate116​​6877現在使用しているすべてのマシンにエイリアスとして投稿した場合、これがあります。
エドゥアルドベゼラ

44

$ TERM変数を見ることができます。

echo $TERM

それはだ場合screen、セッション、用語変数は、「画面」を返す必要があります。

root@deore:/volumes# echo $TERM
screen

Ctrl-a -d(画面を終了する)

root@deore:/volumes# echo $TERM
xterm

またチェックしてください:https : //stackoverflow.com/questions/3472287/how-do-you-tell-if-the-current-terminal-session-is-in-gnu-screen


4
これは、何らかの理由で意図的にTERM値をいじっていないことを前提としています。
デビッドマッキントッシュ

1
画面内でTERM変数を変更している場合、さまざまなトラブルが発生します。
ワンブル

私のSolaris 2.6ノードは、スクリーン値に設定されたTERM値ではうまく動作しません。
デビッドマッキントッシュ

3
"$TERM" = "screen"オプションsudoとは異なり、環境に入るときに保存されるよう$STYです。
メレビウス16

29

デフォルトのキーバインディングを変更していない限り、画面にいる場合は、時間を表示するCtrl+ a-> Ctrl+を実行できtます。これは、他の提案とは異なり、ssh:dが他の場所にある場合でも機能します。


4
なぜこれを支持しないのですか。
AndreKR

これは間違いなく最高のソリューションです。
フェリックスジェン

2
@wombleキーシーケンスとコマンドへの応答としてランダムに破壊的なことを行う可能性のある未知のプログラムを使用している場合、何も安全ではありません。
グーグル

2
@AndreKR:スクリプトでは機能しません
Frank Meulenaar

1
私はスクリーンで、別のスクリーンに上映するので、賛成していない、と私は文字通り$ STYが設定されているかどうかを確認する必要があります。何らかの理由で空に戻ってきます。
ブライアントーマス

14

captionコマンドは、~/.screenrcスクリーンセッションを区別するのに便利な方法です。

私は個人的にこれを使用しています:

$ cat ~/.screenrc
caption always "%{= kc}Screen session on %H (system load: %l)%-28=%{= .m}%D %d.%m.%Y %0c"

画面の下部に次のような行を追加します。

Screen session on gbook (system load: 1,75 1,74 1,68)                   Lun 05.01.2015 13:01

最初の部分(システム名+負荷)は緑で、日付はピンクで表示されます。便利で見逃しにくい!


これは完璧です!邪魔にならず(下の位置)、常に表示(および色付け)され、システムに関する有用な情報を提供します。私もこれをここに投稿しましたstackoverflow.com/a/43571028/2450431
hrvoj3e

6

別の解決策を見つけました:を
変更して.screenrc、画面セッションを通常の端末とはまったく異なるようにします。


私はあなたが提案していることを知っていると思うし、状況によってはこの問題を完全に回避できるかもしれない。サンプル.screenrcファイルを表示するなど、意味を説明する方が便利な場合があります。
jvriesem

0
screen -ls

セッションを表示し、

screen -r sessioninfo

切断された場合、切断されたものに再接続します。

screen -D -r sessioninfo

切断されたものに再接続します。


1
これは質問に答えません。
ウォンブル

-1

を行いますscreen -ls。明示的に示すために起こっているのAttachedDetached状態。

添付例:

$ screen -ls | grep tached
3132.pts-0.esavo00      (Attached)

分離した例:

$ screen -ls |grep tached
3132.pts-0.esavo00  (Detached)

6
他の場所に画面が接続されている場合、これが問題になる可能性があります。
デニスノルテ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.