Wie verhindere ich, dass GNU Screen meine Eingabeaufforderung zurücksetzt? [geschlossen]

13

Wenn ich screen starte, ändert sich meine Eingabeaufforderung. Wie verhindere ich dieses Verhalten? Beispielsweise:

$ echo $PS1
\[\e]0;\h:Prod\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$
$ screen
$ echo $PS1
[\u@\h \W]\$

Interessanterweise funktioniert dies auf anderen Computern nicht. Bei der fraglichen Maschine handelt es sich um Redhat 4 Update 4 mit der Bildschirmversion 4.00.02 (FAU) 5-Dec-03.

Swoogan
quelle

Antworten:

16

Versuchen Sie, Ihrer .screenrc-Datei Folgendes hinzuzufügen (vorausgesetzt, es ist noch nicht vorhanden):

Schale - $ SHELL

Auf diese Weise erhalten Sie eine Anmeldeshell, wenn Sie eine Bildschirmsitzung initialisieren oder ein anderes Terminal aus einer Sitzung heraus erstellen.

Gary Chambers
quelle
1
Ich hatte 'shell / bin / bash' in meinem .screenrc, anscheinend sollte es 'shell - / bin / bash' sein oder was Sie angegeben haben.
Swoogan
2

Viele Distributionen überprüfen den Terminaltyp, bevor sie die Eingabeaufforderung festlegen. Ubuntu zum Beispiel enthält dieses kleine Juwel in der Standardeinstellung .bashrc:

# Setze eine ausgefallene Eingabeaufforderung
case "$ TERM" in
    xterm-color) color_prompt = yes ;;
esac

Da screen eine eigene TERM-Variable ("screen") verwendet, ist bash der Ansicht, dass keine ausgefallene Farbaufforderung angezeigt werden kann, weshalb standardmäßig eine einfachere verwendet wird. Der Bildschirm kann natürlich die gleichen komplexen Eingabeaufforderungen wie ein normales Terminal ausführen.

Um dieses Verhalten außer Kraft zu setzen, müssen Sie am Ende der ~/.bashrcDatei nur Ihre bevorzugten PS1-Optionen festlegen . Wenn Sie sich abenteuerlustig fühlen, suchen Sie den Test, der den Wert der TERM-Variablen überprüft, und ändern Sie ihn so, dass er zusätzlich zu "xterm-color" "screen" akzeptiert.

Insyte
quelle
1

Vielleicht ist dies eine benutzerdefinierte Variable, die in der Datei ~ / .screenrc festgelegt ist?

Babu
quelle
1
Ja, überprüfen Sie auf setenv PS1 in globalen oder persönlichen screenrc
Radius
4
Und welche angepasste Variable wäre das? Wenn Sie die Antwort nicht kennen, antworten Sie nicht.
Swoogan
0

Hatte das gleiche Problem (keine benutzerdefinierte Eingabeaufforderung mehr auf dem Bildschirm) auf einem Computer mit SHELL -$SHELLund ohne setenv PS1screenrc und keinen speziellen Test für (dummes) Terminal in bashrc.

Einstellen des verwendeten $ TERM:

$ echo $TERM
urxvt-unicode-256color

In screenrc wurde meine benutzerdefinierte Eingabeaufforderung unter Screen zurückgegeben:

- #term xterm-256color
+ term urxvt-unicode-256color

PS: Ein anderer Account hatte das nicht nötig, aber bashrc testet auf Dircolors und ein modernes Terminal so 1 :

if [[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] ; then
PS1=<my fancy prompt>

Ich glaube, das funktioniert auch:

if [ "$TERM" != "dumb" ]; then
PS1=<my fancy prompt>
tuk0z
quelle