In der Regel $STYwird eingestellt.
Damit:
if [ -n "$STY" ]; then
echo "I'm most likely running under screen"
fi
$STYist 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 sshzu einem anderen Computer wechseln. Die dort gestartete Shell hat keine $STYUmgebung, 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 $TERMUmgebungsvariablen zu überprüfen . Dieser Wert soll den Anwendungen mitteilen, mit welchem Terminaltyp sie sprechen. Es wird screenauf etwas gesetzt, das mit beginnt screen(da screenverschiedene Varianten von Terminals implementiert werden können). $TERMgeben 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).