Dieser Artikel stellt vor, wie man auf der Kommandozeile in der Bash-Programmiersprache (Skriptsprache) auf Linux-PCs/Servern überprüft, wie viele Ebenen tief die aktuelle interaktive Shell ist.

Ich habe kürzlich einen Artikel mit dem Titel “Wie man die Bash Interactive Shell ohne mehrfache Starts neu startet” geschrieben. In diesem Artikel zeigte ich, wie die Verwendung des Befehls exec bash die aktuelle interaktive Shell auf eine neue aktualisieren kann, aber beim Experimentieren mit verschiedenen Dingen entdeckte ich ein nicht zu vernachlässigendes Usability-Problem.
Also dachte ich darüber nach, wie man zu viele Bash-Instanzen vermeiden kann, ohne exec bash zu verwenden.
Das aktuelle Terminal wird als tty oder pts angezeigt, und durch Anzeigen mit ps f können Sie in der Hierarchieanzeige leicht überprüfen, wie viele Ebenen der Bash-Hierarchie existieren.

PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
21929 21930 21930 21929 tty19 0 Sl 1000 0:00 /mnt/c/Program Files/ConEmu/ConEmu/wsl/wslbridge-backend --check-version=0.2.5-dev -363252 -063253 -163254 -k6A72EFE6177C0FE62CC8A91F3E1369AC32E21930 21934 21934 21934 pts/19 0 Ss 1000 0:01 \_ bash -l -i
21934 24318 24318 21934 pts/19 0 S 1000 0:01 \_ bash
24318 25004 25004 21934 pts/19 0 S 1000 0:01 \_ bash
25004 25794 25794 21934 pts/19 0 S 1000 0:01 \_ bash
25794 26603 26603 21934 pts/19 0 R 1000 0:00 \_ ps fjx
Auf diese Weise können Sie bestätigen, dass Bash drei Ebenen tief gestartet ist.
Durch Anwendung dessen schrieb ich ein Skript wie das folgende.

check-bash-depth(){
tty="$( tty | sed -Ee 's/\/dev\/(pts|tty)\/(.*)/\2/g' )" ; ps fx -o tty,pid,stat,command,%cpu,%mem --sort=tty | ag "^(pts|tty)/?${tty}\s" | tee
}
yuis ASUS /mnt/c/pg$ check-bash-depth
pts/11 6135 Ss \_ bash -l -i 0.0 0.0
pts/11 4006 R \_ ps fx -o tty,pid,st 0.0 0.0
pts/11 4007 S \_ ag ^(pts|tty)/?11\s 0.0 0.0
pts/11 4009 S | \_ sh -c git confi 0.0 0.0
pts/11 4010 R | \_ git config 0.0 0.0
pts/11 4008 S \_ tee 0.0 0.0
Durch Ausführen von check-bash-depth können Sie sehen, wie viele Ebenen der Bash-interaktiven Shell das aktuelle Terminal hat. Dies ermöglicht es Ihnen, Zwischenschichten von Bash zu beenden, die mehrfach gestartet wurden, ohne sich von der aktuellen Login-Shell abzumelden, und so die CPU-Nutzung zu unterdrücken, während Sie arbeiten.
Wie in der Anzeige gezeigt, werden alle Prozesse des aktuellen Terminals angezeigt, sodass es nicht nur verwendet werden kann, um die Bash-Hierarchie zu kennen, sondern auch wenn Sie alle Prozesse aller interaktiven Shells im aktuellen Terminal überprüfen möchten.