Das Problem bei den meisten der oben genannten Antworten besteht darin, dass wir uns möglicherweise in einer Unterschale einer angehängten Bildschirmsitzung befinden. Oder wir öffnen eine Shell für einen Remote-Host innerhalb einer Bildschirmsitzung. Im ersteren Fall können wir die Abstammung des Prozessbaums durchlaufen und den screen
Programmnamen abgleichen. Im letzteren Fall können wir die TERM
Variable meistens auf so etwas überprüfen screen*
.
Meine Antwort ähnelt / u / Parthian-Shot, ist aber nicht so abhängig vom Dienstprogramm pstree. Die Optionen, die er verwendet, stehen mir nicht zur Verfügung. Andererseits ist meine Implementierung immer noch Linux-abhängig: Bei Nicht-Linux-Systemen muss der ps
Befehl angepasst werden . Für Systeme mit älteren Shells, die keine Arrays unterstützen, stehen noch mehr Problemumgehungen zur Verfügung. Aber wie auch immer:
ps_walk_parents() {
local tmp
local ppid=$PPID
while [[ $ppid != 1 ]]; do
tmp=($( ps -o ppid,comm -p $ppid ))
ppid=${tmp[0]}
echo ${tmp[1]}
done
}
if [[ "$TERM" =~ screen* ]] || ps_walk_parents |grep -qxi screen ; then
fi
Wir könnten unsere Funktion ein wenig optimieren, um die Suche zu beenden, wenn ein übergeordneter Prozess mit dem Zielbefehlsnamen ("Bildschirm") übereinstimmt, aber im Allgemeinen trifft die Funktion nur 2 bis 3 Iterationen. Vermutlich möchten Sie diesen Code in eine Startinitialisierung wie .bashrc oder .profile oder etwas anderes einfügen, was wiederum keine Optimierung wert ist.
screen -r
, werden Sie darüber informiert, dass Sie sich auf einem Bildschirm befinden (oder wenn keine Bildschirme vorhanden sind, werden Sie darauf hingewiesen , dass Sie möglicherweise nicht auf einem Bildschirm sein können), und wenn Sie dies tun Wenn Sie sich nicht in einem Bildschirm befinden und an einen angehängt werden, können Sie einfachC-a
(oder eine beliebige Bildschirmbefehlstaste) +d
eingeben, um den gerade eingegebenen Bildschirm zu verlassen. Das ist eine einfache Möglichkeit, dies zu erkennen. Es lohnt sich jedoch nicht, eine Antwort zu geben, da ich davon ausgehe, dass das OP diese Option bereits kannte / ablehnte.