Je viens d’apprendre la commande d’écran sur linux - c’est un génie. J'aime cela. Cependant, le terminal / l'invite à l'écran ressemble et se comporte différemment de mon invite bash standard. Autrement dit, les couleurs ne sont pas les mêmes, la complétion des onglets ne semble pas fonctionner, etc.
Existe-t-il un moyen de dire à l'écran de se comporter comme une invite normale (du moins, normale, comme d'habitude)?
Information additionnelle
Je me connecte via ssh depuis un Mac (Terminal) à une boîte Linux sans tête (Ubuntu). Après la connexion, je l'ai TERM=xterm-color
et quand je lance l'écran, j'ai TERM=screen
.
Je vais essayer les suggestions ci-dessous pour voir si je peux changer la $TERM
valeur en premier.
bash
gnu-screen
xterm
Thornomad
la source
la source
Réponses:
Grâce à ce post , j'ai ajouté une ligne à
~/.screenrc
:Ensuite , les choses dans votre
~/.bashrc
,/etc/bashrc
etc. devraient se lancer.la source
l'écran change le type de terme en
screen
. Vous pouvez faire l'une des deux choses suivantes:.screenrc
.bashrc
fichiers rechercherTERM=screen
ainsi queTERM=xterm
la source
$HOME/.screenrc
fichier et ajouté cette ligne en haut:term xterm-color
et wa la! L'invite de couleur et les$TERM
valeurs correspondent. Cependant, pas de tabulation complète ...$TERM
. certaines choses vont permettre avec xterm ainsi que xterm-color, d’autres ne recherchent que xterm. D'autres choses ont d'autres commutateurs.J'aime la façon dont vous avez écrit votre question, je me demandais la même chose et il a fallu un peu de temps pour le comprendre. J'ai eu la chance de connaître un peu plus sur l'invocation de shell, alors j'ai pensé que le problème était là quelque part.
Voici mes conclusions. Tout d'abord, je trouve personnellement intéressant et intéressant de connaître la différence entre un shell de connexion et un shell autre que de connexion. Faites un
man $SHELL
et recherchez la section sur INVOCATION pour en savoir plus à ce sujet.Vous pouvez demander à votre instance de shell actuelle s'il s'agit d'un shell de connexion ou d'un shell autre que de connexion en envoyant un
shopt login_shell
sur votre invite. Notez que ceci est normalement une option en lecture seule.Sur mes systèmes Debian, il
screen
est toujours venu défaut avec des shells non-login.Après une recherche sur le Web et une lecture
man $SHELL
, j’ai testé plusieurs choses et les deux approches suivantes ont fonctionné pour moi. Dans~/.screenrc
ajouter / mettre à jour une ligne comme suit:Si cela ne fonctionne PAS ET que vous utilisez
bash
, vous pouvez également essayer, partagé par Seamus :Comme indiqué, vous pouvez vérifier si votre instance de shell actuelle est un shell de connexion en l’envoyant
shopt login_shell
sur votre invite.la source
cd ~/Projects ; screen ; pwd #=> ~/Projects
. Cependant, ce que je reçois après avoir ajoutéshell -$SHELL
à mes~/.screenrc
estcd ~/Projects ; screen ; pwd #=> ~/
En fonction de votre habitude d’exécuter Bash, vous pouvez exécuter un shell de connexion. Lorsque vous exécutez
screen
, vous exécutez un shell interactif sans connexion.La différence réside dans le lancement des scripts de démarrage.
/etc/bash.bashrc
puis~/.bashrc
sont recherchés quand un shell interactif sans connexion est démarré/etc/profile
puis les premiers trouvés de~/.bash_profile
,~/.bash_login
et~/.profile
proviennent du démarrage d’un shell de connexion interactifCela peut vous affecter.
Je voudrais aussi vérifier si
$TERM
c'est différent.la source
l'écran ne remplace pas bash, il l'exécute, ou tout autre shell. c'est peut-être en cours d'exécution
csh
,zsh
oubash
mais avec des paramètres différents.La première chose que je voudrais essayer est de vérifier
ps
et/proc/<pid>/cmdline
d’être sûr qu’il utilise le même shell avec les mêmes paramètreslogin
.Après cela, vérifiez
/etc/screenrc
et tout autre fichier mentionné dans laman screen
section FILES.la source
ps
commande et elle indique que la commandebash
est en cours d'exécution (il s'agit d'une commande ps à l'intérieur de l'écran) ... J'ai la couleur qui fonctionne (ci-dessus).J'ai eu le même problème, lorsque j'ai lancé l'écran, j'ai perdu l'invite de couleur PS1 que j'avais trouvée avec talent: P.
Le problème est que je le courais comme ça dans ~ / .bash_profile
Cela signifie que lorsque screen exécutait bash_profile, la PS1 n’était pas reportée.
Le correctif est simple: ajoutez export à l'instruction PS1 dans le fichier ~. / Bash_profile pour ressembler à ceci:
Ainsi, la variable n'est pas perdue dans l'exécution imbriquée.
la source
Je veux juste ajouter quelque chose à propos de "defshell-bash" (que je viens de comprendre après des mois de casse-tête). Lorsque vous faites cela, le shell enfant exécuté par screen a $ SHELL défini sur "bash", au lieu de "/ bin / bash" comme il le serait normalement. Si vous exécutez ensuite "script" dans votre session screen, vous obtenez:
Ou du moins c'est ce qui se passe sur ma boîte Ubuntu 14.04. La solution de contournement que j'ai utilisée consiste à exécuter
$ SHELL=/bin/bash script
. J'imagine qu'avoir mal configuré $ SHELL cassera d'autres trucs, mais le script est ce que j'ai remarqué.la source
J'utilise cet extrait de code
.profile
avant toute initialisation de shell: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, si aucune session d’écran n’est en cours, je… eh bien, je ne tombe pas dans l’invite du shell standard. Il existe encore une invite de
sudo
mot de passe (depuis 99% du temps, je me connecte pour administrer le serveur), et si je prévois d'effectuer une longue tâche, j'annule la connexion sudo, lance l'écran manuellement dans la session de l'utilisateur et le sudo dans celui-ci.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, celle-ci est déjà initialisée avec les paramètres régionaux et autres et vous n'avez pas besoin de la refaire.
la source