web-dev-qa-db-ja.com

Linuxの「画面」内で実行しているかどうかを確認するにはどうすればよいですか?

「画面」とは、 切断されたsshセッションに再接続する方法 に記載されているプログラムを指します。それは良い施設です。

しかし、私が本当に知りたい質問があります。 「画面」内で実行しているかどうかを確認するにはどうすればよいですか?違いは次のとおりです。

  • はいの場合、現在のターミナルウィンドウを安全に閉じることができます。たとえば、Shell(Bashなど)セッションを失うことなく、PuTTYウィンドウを閉じます。
  • いいえの場合、ターミナルウィンドウを閉じる前に、保留中の作業に注意する必要があることを知っています。

このステータスをPS1プロンプトに表示して、いつでも自動的に確認できるようにしたいのですが。

60
Jimm Chen

(「 自分が画面にいるかどうかを確認するにはどうすればよいですか? から盗まれ、StackOverflowで上書きされ、ユーザー jho によって作成されました。PS全体で重複に投票することはできません。 StackExchangeサイト。)

$STYを確認してください。 nullの場合、「実際の」端末を使用しています。何かが含まれている場合は、現在の画面の名前です。

画面にいない場合:

eric@dev ~ $ echo $STY
eric@dev ~ $ 

画面にいる場合:

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71

Screenの代わりにtmuxを使用する場合は、$TMUXも確認してください。これをプロンプトに追加するには、~/.bashrcに以下を追加します:

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi
88
Wesley

探す $STYは、それ自体との通信にscreenが使用する詳細を提供します。 $WINDOWは、現在のscreenウィンドウ番号になります。

14
geekosaur

私が通常使用する簡単なチェックは、 Ctrl-a

  • カーソルが行の先頭にジャンプするの場合、私は中ではないスクリーンセッションです。

  • 何も起こらないの場合、私は内部にいるスクリーンセッションであり、スクリーンコントロールキーを使用したことがわかります。私はそれから a (行の先頭にジャンプ)、 w (現在の画面ウィンドウを表示)または他の「無害な」画面コマンドを実行して、コマンドプロンプトに戻ります。

(もちろん、これは現在bashまたは「行の先頭にジャンプする」またはCtrl-aを押したときに同等に害のない何かを実行する他のソフトウェアを実行している場合にのみ機能します。)

13
Heinzi

私はこれを.bashrc

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"

それは絶対確実ではありませんが、新しい画面を作成するときはいつでも、ウィンドウ番号をプロンプトに入れます。 screenを実行していない場合、番号はありません。

7
Josh

ええと、mostの時間(誰かが物事を台無しにしようとしない限り)TERMscreenに設定されます(または少なくともscreenについて言及します)どこかに)。

問題の簡単な解決策は、どこでも画面を実行することです。それなしで家を出ないでください。

7
womble

もっとクールな方法があります。

以下を〜/ .screenrcに追加すると、下部にステータス行が表示されます(日付、時刻、システムの負荷を反転したテキストで表示します。以下のmanページのリンクにさらにエスケープコードがあります。

    hardstatus alwayslastline
    hardstatus string '%Y-%m-%d %c | %l'

スクリーンセッションでctrl-a:source ~/.screenrcを使用している場合は、これを入手してください。

Linux JournalのKyle Rankinに感謝しなければなりません。 http://www.linuxjournal.com/article/1095 で彼の素晴らしい記事をご覧ください。彼が参照するmanページのセクションは、 http://www.gnu.org/software/screen/manual/screen.html#String-Escapes にあります。

3
HankCa

また、$$からプロセスツリーを再帰して、画面インスタンスが見つかるかどうかを確認することもできます。正確なチェーンは、おそらくセットアップによって異なります。私のOS Xボックスでは、画面内のzshloginを親、SCREENを祖父母とし、screenをその祖父母として。

2
Aaron Davies