Vraag Hoe weet ik dat ik in een linux "scherm" loop of niet?


Het "scherm" verwijst naar een programma genoemd in Hoe opnieuw verbinding te maken met een niet-verbonden ssh-sessie . Dat is een goede faciliteit.

Maar er is een vraag die ik heel graag zou willen weten. Hoe weet ik of ik binnen een "scherm" ren? Het verschil is:

  • Zo ja, dan weet ik dat ik het huidige terminalvenster veilig kan sluiten, bijvoorbeeld een PuTTY-venster sluiten, zonder mijn shell (Bash enz.) Sessie te verliezen.
  • Zo nee, dan weet ik dat ik voor alle lopende werkzaamheden moet zorgen voordat ik het terminalvenster sluit.

Ik wil graag dat deze status wordt weergegeven in de PS1-prompt, zodat ik deze op elk gewenst moment automatisch kan zien.


57
2018-04-06 01:17


oorsprong


Als u tmux gebruikt in plaats van het scherm, krijgt u standaard een kleine statusbalk. Ze zijn vrijwel hetzelfde voor basisgebruik. - Samuel Edwin Ward
Plaats je totem op de tafel en laat hem draaien. Als het blijft draaien, is alles goed. Anders zit u in een scherm:] - Konerak
Je kan ook gebruiken byobu met scherm en tmux. Het kan worden ingesteld om automatisch te laden bij het inloggen en vervolgens op de F6-toets te klikken en uit te loggen. - mp3foley
Mogelijk duplicaat van Hoe controleer ik of ik in de screen-sessie ben? - Andrew Schulman


antwoorden:


(Gestolen van "Hoe kan ik zien of ik in een scherm zit?"over op StackOverflow en geschreven door gebruiker jho. Postscriptum U kunt niet op duplicaten op StackExchange-sites stemmen.)

Controleren $STY. Als het nul is, bevindt u zich op een 'echte' terminal. Als het iets bevat, is dit de naam van het scherm waarin u zich bevindt.

Als u niet op het scherm staat:

eric@dev ~ $ echo $STY
eric@dev ~ $ 

Als u op het scherm staat:

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71

Als u tmux gebruikt in plaats van het scherm, controleert u ook $TMUX. Voeg het volgende toe aan uw om dit aan uw prompt toe te voegen ~/.bashrc:

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi

86
2018-04-06 01:24



als je iets via runt sudo het neemt standaard geen omgevingsvariabelen over, inclusief $STY. Maar $TERM  is meestal gepropageerd naar de sudo-omgeving, dus misschien voor beide $STY  of  $TERM=="screen" - rcoup


Zoeken $STY welke details geeft dat screen gebruikt om met zichzelf te communiceren; $WINDOW zal dan de stroom zijn screen venster nummer.


14
2018-04-06 05:28





De eenvoudige controle die ik gewoonlijk gebruik, is door gewoon te klikken Ctrl-een:

  • Als het cursor springt naar het begin van de regel, Ik ben niet binnen een schermsessie.

  • Als niks gebeurt, Ik weet dat ik ben binnen een schermsessie en dat ik zojuist de schermbedieningssleutel heb gebruikt. Ik sloeg toen een (spring naar het begin van de regel), w (toon de huidige schermvensters) of voer een ander "onschadelijk" schermcommando uit om terug te gaan naar de opdrachtprompt.

(Dit werkt natuurlijk alleen als je op dit moment bash of een ander stukje software uitvoert dat "naar het begin van de regel" springt of iets equivalent onschadelijks doet wanneer je op Ctrl-a drukt.)


13
2018-04-06 01:21



Dit werkt alleen als uw schermbedieningstoets op de standaard Ctrl-a staat, natuurlijk. - ShreevatsaR
het raken van de besturingsknop + DD zou ontkoppelen en ssh beëindigen. Je kunt die combinatie raken voor meer gemak - akostadinov
Hoewel het antwoord goed is voor de eigenlijke vraag, is deze methode niet scriptbaar. - Nikodemus RIP


Goed, meest van de tijd (afwezig iemands pogingen om dingen in de war te sturen) jouw TERM zal worden ingesteld op screen (of op zijn minst noemen screen ergens).

De eenvoudige oplossing voor het probleem is gewoon overal scherm draaien. Verlaat het huis niet zonder het, zeg ik.


7
2018-04-06 17:01



$TERM verspreidt zich ook meestal door sudo, wat een pluspunt is! - rcoup


Ik bewaar dit in mijn .bashrc:

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"

Het is niet onfeilbaar, maar telkens wanneer ik een nieuw scherm maak, wordt het vensternummer in de prompt weergegeven. Als ik niet ren screen, er is geen nummer.


7
2017-09-16 00:56





Ik heb een nog coolere manier.

Voeg het volgende toe aan je ~ / .screenrc en je ziet onderaan een statusregel (die in geïnverteerde tekst de datum, tijd en systeembelasting toont.) Meer ontsnappingscodes gevonden in manpaginalink hieronder.

    hardstatus alwayslastline
    hardstatus string '%Y-%m-%d %c | %l'

Geef dit op in een schermsessie met ctrl-a:source ~/.screenrc.

Ik moet hiervoor Kyle Rankin van Linux Journal bedanken. Zie zijn fantastische artikel op http://www.linuxjournal.com/article/10950. De manpagina-sectie waarnaar hij verwijst, is te vinden op http://www.gnu.org/software/screen/manual/screen.html#String-Escapes.


3
2018-04-06 14:19





je zou ook de procesboom kunnen recursiveren $$ om te zien of u een scherminstantie vindt. de exacte ketting hangt waarschijnlijk af van je setup - in mijn OS X-box, a zsh binnen scherm heeft login als zijn ouder, SCREEN als zijn grootouder, en screen als overgrootouder.


2