In der Regel $STY
wird eingestellt.
Damit:
if [ -n "$STY" ]; then
echo "I'm most likely running under screen"
fi
$STY
ist in der Regel das, was Sie brauchen, um mit Ihrem zu sprechen screen
. Dies wird verwendet, um den Pfad des Unix-Domain-Sockets zu erstellen, der zur Steuerung verwendet wird screen
(so etwas wie) /var/run/screen/S-$USER/$STY
.
Das funktioniert zum Beispiel nicht, wenn Sie von diesem Bildschirm ssh
zu einem anderen Computer wechseln. Die dort gestartete Shell hat keine $STY
Umgebung, und das würde ihr sowieso nichts nützen, da sie nicht auf die Unix-Domain-Sockets auf Ihrem Computer zugreifen kann.
Es ist jedoch möglich, das Terminal mit einer Escape-Sequenz abzufragen, um seinen Typ zu bestimmen:
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
Ein anderer Ansatz, wie von @ val0x00ff vorgeschlagen, besteht darin, den Wert der $TERM
Umgebungsvariablen zu überprüfen . Dieser Wert soll den Anwendungen mitteilen, mit welchem Terminaltyp sie sprechen. Es wird screen
auf etwas gesetzt, das mit beginnt screen
(da screen
verschiedene Varianten von Terminals implementiert werden können). $TERM
geben accross ist rlogin
, rsh
, telnet
, ssh
. Es funktioniert nicht so garantiert wie oben, ist aber einfacher und weniger aufdringlich.
case $TERM in
(screen*) echo "I'm more than likely running in screen"
esac
Wie bei der vorherigen Lösung werden Sie möglicherweise ausgeführt screen
, können jedoch möglicherweise keine Befehle für diese Lösung ausgeben screen -X
. Beachten Sie jedoch, dass Sie Befehle mithilfe von Escape-Sequenzen übergeben können (obwohl dies aus Sicherheitsgründen nicht standardmäßig aktiviert ist).
Ich benutze tmux selbst und dieses kleine bisschen, um Sitzungen nur aufzulisten, wenn ich nicht bereits in einer tmux-Sitzung bin
quelle