「画面」とは、 切断されたsshセッションに再接続する方法 に記載されているプログラムを指します。それは良い施設です。
しかし、私が本当に知りたい質問があります。 「画面」内で実行しているかどうかを確認するにはどうすればよいですか?違いは次のとおりです。
このステータスをPS1プロンプトに表示して、いつでも自動的に確認できるようにしたいのですが。
(「 自分が画面にいるかどうかを確認するにはどうすればよいですか? から盗まれ、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
探す $STY
は、それ自体との通信にscreen
が使用する詳細を提供します。 $WINDOW
は、現在のscreen
ウィンドウ番号になります。
私が通常使用する簡単なチェックは、 Ctrl-a:
カーソルが行の先頭にジャンプするの場合、私は中ではないスクリーンセッションです。
何も起こらないの場合、私は内部にいるスクリーンセッションであり、スクリーンコントロールキーを使用したことがわかります。私はそれから a (行の先頭にジャンプ)、 w (現在の画面ウィンドウを表示)または他の「無害な」画面コマンドを実行して、コマンドプロンプトに戻ります。
(もちろん、これは現在bashまたは「行の先頭にジャンプする」またはCtrl-aを押したときに同等に害のない何かを実行する他のソフトウェアを実行している場合にのみ機能します。)
私はこれを.bashrc
:
PS1='[\u@\h \W'
if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
PS1="$PS1]$"
それは絶対確実ではありませんが、新しい画面を作成するときはいつでも、ウィンドウ番号をプロンプトに入れます。 screen
を実行していない場合、番号はありません。
ええと、mostの時間(誰かが物事を台無しにしようとしない限り)TERM
はscreen
に設定されます(または少なくともscreen
について言及します)どこかに)。
問題の簡単な解決策は、どこでも画面を実行することです。それなしで家を出ないでください。
もっとクールな方法があります。
以下を〜/ .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 にあります。
また、$$
からプロセスツリーを再帰して、画面インスタンスが見つかるかどうかを確認することもできます。正確なチェーンは、おそらくセットアップによって異なります。私のOS Xボックスでは、画面内のzsh
はlogin
を親、SCREEN
を祖父母とし、screen
をその祖父母として。