Ich habe gerade etwas über den Bildschirmbefehl unter Linux gelernt - er ist genial. Ich liebe es. Das tatsächliche Terminal / die Eingabeaufforderung auf dem Bildschirm sieht jedoch anders aus und verhält sich anders als meine Standard-Bash-Eingabeaufforderung. Das heißt, die Farben sind nicht gleich, die Tab-Vervollständigung scheint nicht zu funktionieren usw.
Gibt es eine Möglichkeit, wie ich dem Bildschirm sagen kann, dass er sich wie ein normaler (zumindest normaler) Bash-Prompt verhält?
zusätzliche Information
Ich verbinde mich per ssh von einem Mac (Terminal) zu einer kopflosen Linux-Box (Ubuntu). Nach dem Einloggen habe ich TERM=xterm-color
und wenn ich Bildschirm laufen habe ich TERM=screen
.
Ich werde die folgenden Vorschläge ausprobieren, um zu sehen, ob ich den $TERM
Wert zuerst ändern kann.
quelle
Antworten:
Dank dieses Beitrags habe ich eine Zeile hinzugefügt zu
~/.screenrc
:Dann Dinge in Ihrem
~/.bashrc
,/etc/bashrc
etc. sollten laufen lassen.quelle
screen ändert den Begriffstyp in
screen
. Sie können eines von zwei Dingen tun:.screenrc
.bashrc
Dateien aussehenTERM=screen
sowieTERM=xterm
quelle
$HOME/.screenrc
Datei erstellt und diese Zeile oben hinzugefügt:term xterm-color
und wa la! Farbaufforderung und die$TERM
Werte stimmen überein. Allerdings keine Tab-Vervollständigung ...$TERM
. Einige Dinge werden sowohl mit xterm als auch mit xterm-color möglich sein, andere suchen nur nach xterm. Andere Dinge haben andere Schalter.Mir gefällt die Art und Weise, wie Sie Ihre Frage geschrieben haben. Ich habe mir das Gleiche gefragt und es hat eine Weile gedauert, bis ich es herausgefunden habe. Ich hatte das Glück, bereits ein wenig über Shell-Aufrufe zu wissen, und stellte mir das Problem irgendwo vor.
Hier sind meine Erkenntnisse. Erstens finde ich es persönlich interessant und es lohnt sich, den Unterschied zwischen einer Login-Shell und einer Nicht-Login-Shell zu kennen. Machen Sie a
man $SHELL
und suchen Sie nach dem Abschnitt INVOCATION, um mehr darüber zu erfahren.Sie können Ihre aktuelle Shell-Instanz fragen, ob es sich um eine Anmelde-Shell oder eine Nicht-Anmelde-Shell handelt, indem Sie
shopt login_shell
an Ihrer Eingabeaufforderung ein ausgeben . Beachten Sie, dass dies normalerweise eine schreibgeschützte Option ist.Auf meinen Debian-Systemen sind
screen
standardmäßig Shells ohne Anmeldung installiert .Nachdem
man $SHELL
ich das Web durchsucht und gelesen hatte , testete ich einige Dinge und die folgenden beiden Ansätze funktionierten für mich. In~/.screenrc
hinzufügen / aktualisieren eine Zeile wie folgt:Wenn das nicht klappt UND Sie verwenden
bash
, können Sie alternativ versuchen, wie von Seamus geteilt :Wie bereits erwähnt, können Sie testen, ob Ihre aktuelle Shell-Instanz eine Anmeldeshell ist, indem Sie sie
shopt login_shell
an Ihrer Eingabeaufforderung absetzen.quelle
cd ~/Projects ; screen ; pwd #=> ~/Projects
. Was ich jedoch nach dem Hinzufügenshell -$SHELL
zu meinem~/.screenrc
cd ~/Projects ; screen ; pwd #=> ~/
Je nachdem, wie Sie es gewohnt sind, Bash auszuführen, führen Sie möglicherweise eine Anmeldeshell aus. Wenn Sie ausführen
screen
, wird eine interaktive Shell ausgeführt , bei der es sich nicht um eine Anmeldung handelt.Der Unterschied besteht darin, in welchen Startskripten ausgeführt werden.
/etc/bash.bashrc
werden dann~/.bashrc
bezogen, wenn eine nicht angemeldete interaktive Shell gestartet wird/etc/profile
dann werden die ersten gefundenen von~/.bash_profile
,~/.bash_login
und~/.profile
bezogen, wenn eine interaktive Login-Shell gestartet wirdDies kann Sie betreffen.
Ich würde auch prüfen, ob
$TERM
das anders ist.quelle
screen ersetzt nicht bash, es führt es aus oder irgendeine andere Shell. Vielleicht läuft es
csh
,zsh
oderbash
aber mit verschiedenen Parametern.Das erste, was ich versuchen würde, ist zu überprüfen
ps
und/proc/<pid>/cmdline
sicherzustellen, dass es die gleiche Shell mit den gleichen Parametern verwendet wielogin
tut.Überprüfen Sie danach
/etc/screenrc
alle anderen Dateien, die imman screen
Abschnitt DATEIEN aufgeführt sind.quelle
ps
Befehl ausgeführt und esbash
wird angezeigt , dass dieser ausgeführt wird (dies ist ein ps-Befehl innerhalb des Bildschirms).Ich hatte das gleiche Problem, als ich den Bildschirm laufen ließ, verlor ich die coole PS1-Farbaufforderung, die ich geschickt gefunden hatte: P.
Das Problem ist, dass ich es so in ~ / .bash_profile ausgeführt habe
Das bedeutet, dass die PS1 nicht übertragen wird, als auf dem Bildschirm das bash_profile ausgeführt wurde.
Das Problem lässt sich leicht beheben: Fügen Sie der PS1-Anweisung in ~. / Bash_profile den folgenden Export hinzu:
So geht die Variable bei der verschachtelten Ausführung nicht verloren.
quelle
Ich möchte nur etwas über "defshell -bash" hinzufügen (was ich gerade herausgefunden habe, nachdem ich monatelang am Kopf gekratzt habe). Wenn Sie dies tun, hat die von screen ausgeführte untergeordnete Shell $ SHELL auf "bash" gesetzt, anstelle von "/ bin / bash", wie es normalerweise der Fall wäre. Wenn Sie dann "script" in Ihrer Bildschirmsitzung ausführen, erhalten Sie:
Oder zumindest passiert das auf meiner Ubuntu 14.04-Box. Die Problemumgehung, die ich verwendet habe, ist zu laufen
$ SHELL=/bin/bash script
. Ich könnte mir vorstellen, dass die falsche Einstellung von $ SHELL andere Dinge kaputt macht, aber das Skript ist mir aufgefallen.quelle
Ich verwende dieses Snippet in meinem,
.profile
bevor eine Shell-Initialisierung gestartet wird:which screen > /dev/null 2>&1 && { screen -q -ls if [ $? -gt 10 ]; then read -p "$(tput setaf 2)Found a running SCREEN sesion, attach?$(tput sgr0)[Y/n] " y >&2 if [ "${y:-y}" = "y" -o "$y" = "Y" ]; then screen -aDR && logout fi else echo "$(tput setaf 3)No running SCREEN sessions found.$(tput sgr0)" >&2 fi }
Wenn dann keine Bildschirmsitzung ausgeführt wird, falle ich nicht in die Standard-Shell-Eingabeaufforderung. Es gibt eine weitere Eingabeaufforderung für
sudo
pasword (da ich mich 99% der Zeit zum Verwalten des Servers anmelde). Wenn ich vorhabe, eine längere Aufgabe auszuführen, breche ich die sudo-Anmeldung ab, starte den Bildschirm manuell in der Sitzung meines Benutzers und sudo dort.Der entscheidende Punkt hierbei ist "vor jeder Shell-Initialisierung", sodass eine laufende Bildschirmsitzung bereits mit dem Gebietsschema und anderen Elementen initialisiert ist und Sie sie nicht erneut ausführen müssen.
quelle