画面内で端末セッションが実行されているかどうかを確認する方法

画面内で端末セッションが実行されているかどうかを確認する方法

bashスクリプトを実行するときにこれが可能であることを確認したいと思いますscreen

.bashrcセッションが画面内で開始されるかどうかに応じて、コマンドプロンプトの色を設定できるようにしたいです。

回答を受けた後、次のリンクが見つかりました。私が画面にあるかどうかはどうすればわかりますか?

ベストアンサー1

通常$STY設定されます。

だから:

if [ -n "$STY" ]; then
  echo "I'm most likely running under screen"
fi

$STY通常会話を共有するために必要なものscreen。制御に使用されるUnixドメインソケットへのパスを設定するために使用されますscreen/var/run/screen/S-$USER/$STY

sshたとえば、この画面で別のコンピュータに接続しても機能しません。ここで実行されているシェルは$STYその環境には1つもなく、コンピュータのUnixドメインソケットにアクセスできないため、とにかく役に立ちません。

ただし、端末はエスケープシーケンスを使用してそのタイプを決定するように照会できます。

if [ -t 1 ] && [ -t 0 ]; then
  s=$(stty -g)
  stty -icanon -echo min 0 time 3
  printf '\033[>c'
  type=$(dd count=1 2> /dev/null)
  stty "$s"
  case $type in
    (*'>83;'*) echo "this is screen"
  esac
fi

@val0x00ffが提案した別のアプローチは、環境変数の値を確認することです$TERM。この値は、アプリケーションがどのタイプの端末と通信しているかを知らせるためのものです。 (さまざまなターミナルバリエーションが実装される可能性があります)screenで始まるものに設定されています。通り過ぎる、、、。上記のように動作することを保証することはできませんが、より簡単で邪魔になりません。screenscreen$TERMrloginrshtelnetssh

case $TERM in
  (screen*) echo "I'm more than likely running in screen"
esac

以前の解決策と同様に、実行している可能性がありますが、screenコマンドを実行できない可能性がありますscreen -X。ただし、エスケープシーケンスを使用してコマンドを渡すことができます(セキュリティ上の理由からデフォルトでは有効になっていませんが)。

おすすめ記事