bashスクリプトを実行するときに、それが内で実行されているかどうかを確認できるようにしたいと思いますscreen
。これは可能ですか?
これ.bashrc
は、セッションが画面内で開始されるかどうかに応じてコマンドプロンプトの色を設定できるようにするためです。
自分の答えが出たら、このリンクを見つけました。自分が画面にいるかどうかはどうすればわかりますか?
bashスクリプトを実行するときに、それが内で実行されているかどうかを確認できるようにしたいと思いますscreen
。これは可能ですか?
これ.bashrc
は、セッションが画面内で開始されるかどうかに応じてコマンドプロンプトの色を設定できるようにするためです。
自分の答えが出たら、このリンクを見つけました。自分が画面にいるかどうかはどうすればわかりますか?
回答:
通常は$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
はその環境にはありません。それは、マシンの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
ように)で始まるものに設定されます。accross渡され、、、。上記のように動作することは保証されていませんが、シンプルで邪魔になりません。screen
screen
$TERM
rlogin
rsh
telnet
ssh
case $TERM in
(screen*) echo "I'm more than likely running in screen"
esac
前のソリューションと同様に、で実行しscreen
ている可能性がありますがscreen -X
、たとえばでコマンドを発行できない場合があります。ただし、エスケープシーケンスを使用してコマンドを渡すことができることに注意してください(ただし、セキュリティ上の理由から、デフォルトでは有効になっていません)。
screenで実行すると、$TERM
環境変数がscreenに変わります。あなたはスクリプトでチェックすることができます例えば
if [[ "$TERM" == screen* ]]; then
echo "Running in screen"
else
echo "Outside screen"
fi
それはアプローチの1つでしょう。echo $TERM
画面の外側と画面のecho $TERM
内側で違いを確認します