49 votes

Comment demander à screen de se comporter comme un Shell standard de bash ?

Je viens d'apprendre l'existence de la commande screen sous linux - c'est génial. Je l'adore. Cependant, le terminal/prompt réel dans screen ressemble et se comporte différemment de mon prompt bash standard. C'est-à-dire que les couleurs ne sont pas les mêmes, la complétion par tabulation ne semble pas fonctionner, etc.

Existe-t-il un moyen de faire en sorte que screen se comporte comme un prompt bash normal (du moins, normal comme dans ce que j'ai l'habitude de faire) ?

Informations complémentaires

Je me connecte via ssh depuis un Mac (Terminal) à une machine linux sans tête (Ubuntu). Après m'être connecté, j'ai TERM=xterm-color et quand je lance l'écran, j'ai TERM=screen .

Je vais essayer de suivre les suggestions ci-dessous pour voir si je peux changer l'adresse de l'ordinateur. $TERM valeur en premier.

0 votes

Juste par curiosité, quel système d'exploitation et quel type de terminal avez-vous à l'écran de démarrage ? Je pense que votre problème est plus lié au fait que votre terminal fait quelque chose de mal ou identifie incorrectement l'écran.

0 votes

@Zoredache - J'ai ajouté cette information au post, ci-dessus. Merci. J'ai dû ajuster les paramètres de mon terminal pour que la touche de retour arrière fonctionne...

0 votes

Beurk, je n'aime vraiment pas Terminal.app. Personnellement, je vous suggère d'envisager d'utiliser une alternative voir ( serverfault.com/questions/19240/ )

2voto

davidsaliba Points 21

J'ai eu le même problème, quand j'ai lancé l'écran, j'ai perdu l'invite de couleur PS1 que j'avais astucieusement trouvée :P.

Le problème est que je l'exécutais comme ceci dans ~/.bash_profile

PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "

Cela signifie que lorsque screen a exécuté le bash_profile, le PS1 n'a pas été reporté.

La correction est facile : ajoutez export à la déclaration PS1 dans le ~./bash_profile pour ressembler à ceci :

export PS1="\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "

Comme quoi la variable n'est pas perdue dans l'exécution imbriquée.

1voto

AnrDaemon Points 131

J'utilise cet extrait dans mon fichier .profile avant que toute initialisation de Shell ne soit lancée : 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 }

Ensuite, s'il n'y a pas de session écran en cours, je eh bien, je ne tombe pas dans l'invite standard Shell. Il y a une autre invite pour sudo (puisque 99% du temps je me connecte pour administrer le serveur), et si je prévois d'effectuer une tâche longue, j'annule sudo login, lance screen manuellement dans la session de mon utilisateur et sudo dedans.

Le point clé ici est "avant toute initialisation de Shell", de sorte que lorsque vous avez déjà une session d'écran en cours d'exécution, elle est déjà initialisée avec la locale et d'autres choses et vous n'avez pas besoin de le refaire à nouveau.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X