Poulpatine Posté(e) le 5 septembre 2012 Partager Posté(e) le 5 septembre 2012 Bonjour à tous ! J'ai un problème mon bash_profile modifié. J'essaie de me faire un command_prompt un peu sympa mais je suis confronté à un problème récurrent. Voici comment le reproduire. Lorsque je défini mon prompt de la manière suivante : export PROMPT_COMMAND="echo PROMPT_COMMAND"PROMPT_COMMANDexport PS1="PS1 $" Mon prompt ressemble à ça : PROMPT_COMMANDPS1 $ Je peux taper une ligne entière sans rencontrer deproblème. PROMPT_COMMANDPS1 $abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz Maintenant, si je change mon PROMPT_COMMAND (afin de tout avoir sur la même ligne) avec : export PROMPT_COMMAND="echo -n PROMPT_COMMAND " Mon prompt ressemble à ça : PROMPT_COMMAND PS1 $ Mais lorsque je tape une commande de plus d'une ligne, une partie de la ligne se retrouve mélangée comme vous pouvez l'observer en dessous : PROMPT_COMMAND PS1 $abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghixyzmnopqrstuvw Vous pouvez essayer et reproduire ça chez vous. Il y a d'autres problèmes lorsque, toujours après avoir dépassé la longueur d'une ligne, je fais remonter mon curseur en arrière (la partie PROMPT_COMMAND disparaît). Si vous avez une idée, je suis preneur :). Merci ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
dudul88 Posté(e) le 6 septembre 2012 Partager Posté(e) le 6 septembre 2012 Je viens de tenter dans cygwin et le problème est similaire (c'est sur le début de la deuxième ligne qu'il y a un problème). Pour l'instant je n'ai pas de solution. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Poulpatine Posté(e) le 6 septembre 2012 Auteur Partager Posté(e) le 6 septembre 2012 Oui, en fait, la ligne se superpose sur la longueur du prompt command. C'est très bête mais vraiment très chiembêtant. Lien vers le commentaire Partager sur d’autres sites More sharing options...
16ar Posté(e) le 7 septembre 2012 Partager Posté(e) le 7 septembre 2012 Je crois que c'est parce que bash va pouvoir savoir à quelle moment il doit sauter de ligne en calculant la longueur de la valeur de $PS1 Or comme tu as concatené une autre chaine avant, bash ne saurait pas quelle est la longueur de cette première chaine. Question, pourquoi pas : PS1="`echo -n COMMAND_PROMPT` PS1 $" ? (pas sur que ca règle le problème par contre) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Poulpatine Posté(e) le 7 septembre 2012 Auteur Partager Posté(e) le 7 septembre 2012 Salut 16ar. Merci de ton retour. En fait, il faut savoir que le contenu de la variable PROMPT_COMMAND est interprété à chaque nouvelle ligne de prompt. Dans mon exemple j'ai pris un "echo -n PROMPT_COMMAND" mais en vrai j'ai un contenu beaucoup plus fouillé Lien vers le commentaire Partager sur d’autres sites More sharing options...
dudul88 Posté(e) le 7 septembre 2012 Partager Posté(e) le 7 septembre 2012 As-tu tenté une mise à jour de bash ? Et avec zsh ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Poulpatine Posté(e) le 7 septembre 2012 Auteur Partager Posté(e) le 7 septembre 2012 Mon bash est à jour oui, je n'utilise pas zsh et je ne peux pas l'installer sur toute ma prod . Lien vers le commentaire Partager sur d’autres sites More sharing options...
16ar Posté(e) le 7 septembre 2012 Partager Posté(e) le 7 septembre 2012 Si tu mets ton evaluation de variable ou de trucs complexe direct dans le PS1, ca sera mis à jour a chaque re-prompt. C'est bien ce que tu veux non ? Sinon, en moulant sur linuxfr, je suis tombé sur ca y'a quelques semaines : https://github.com/nojhan/liquidprompt Ca peut peut etre te donner des idées ou des pistes. Ca faisait un bail que tu ne trainais plus par ici, Poulpy ! Tu vas bien ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Poulpatine Posté(e) le 7 septembre 2012 Auteur Partager Posté(e) le 7 septembre 2012 Non, ça ne marchera pas. Ce qu'il faut faire c'est un truc du genre : PROMPT_COMMAND="PS1=\"PROMPT_COMMAND PS1\" de manière à setter la variable de PS1 à chaque nouvelle ligne. Mais je rencontre des soucis avec les couleurs maintenant :( ... Décidémment !!! Sinon, oui oui ça va bien. Ca faisait en effet un moment que je n'étais plus passé ^^. Tout roule pour toi aussi ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
16ar Posté(e) le 7 septembre 2012 Partager Posté(e) le 7 septembre 2012 Pourquoi ca ne marchera pas ? PS1 est fait pour être évalué a chaque prompt. Tu peux un peu détailler ce que tu as dans ton command_prompt ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Poulpatine Posté(e) le 7 septembre 2012 Auteur Partager Posté(e) le 7 septembre 2012 # .bashrc## \o/ Poulpy's bashrc \o/## INCLUSION DE DIFFERENTES SOURCESif [ -f /etc/bashrc ]; then . /etc/bashrcfi# Source des definitions des couleursif [ -f /etc/couleurrc ]; then . /etc/couleurrcfi# Source la conf local au userif [ -f ~/.bashrc_local ]; then . ~/.bashrc_localfi# CREATION DES ALIASalias rm='rm -i'alias cp='cp -i'alias mv='mv -i'alias grep='grep --color'alias grepi='grep --color -i'alias ls='sudo ls --color=auto'alias l='sudo ls --color=auto'alias ll='sudo ls -hl --color=auto'alias la='sudo ls -a --color=auto'alias lla='sudo ls -lhart --color=auto'alias lld='sudo ls -lhd --color=auto'alias llad='sudo ls -lhad --color=auto'alias df='sudo df -h'alias d='sudo du -hs'alias hst='echo -n -e "\033k$HOSTNAME\033\\"'MYNOIR='\033[0;30m'MYROUGE='\033[0;31m'MYVERT='\033[0;32m'MYMARRON='\033[0;33m'MYBLEU='\033[0;34m'MYVIOLET='\033[0;35m'MYCYAN='\033[0;36m'MYGRISC='\033[0;37m'MYGRIS='\033[1;30m'MYROSE='\033[1;31m'MYVERTC='\033[1;32m'MYMARRONC='\033[1;33m'MYBLEUC='\033[1;34m'MYVIOLETC='\033[1;35m'MYCYANC='\033[1;36m'MYBLANC='\033[1;37m'# DEFINITION DE LA COULEUR DU PS1if [[ $HOSTNAME == *BLI* || $HOSTNAME == *bli* ]]; then HOST_COLOR=$ROSEelse HOST_COLOR=$MARRONfi# VIRER LES CTRL Cstty -echoctl# FANCY PROMPT COMMANDif which bc > /dev/null 2>&1; then if [ $(echo $(cat /proc/loadavg |cut -d " " -f 1)*100/$(cat /proc/cpuinfo |grep -c processor) 2>/dev/null|bc) -gt 100 ]; then export PROMPT_COMMAND='echo -n -e "\033k$HOSTNAME\033\\"' else export PROMPT_COMMAND='echo -n -e "\033k$HOSTNAME\033\\";sysLoad=`echo $(cat /proc/loadavg |cut -d " " -f 1)*100/$(cat /proc/cpuinfo |grep -c processor) 2>/dev/null|bc` ;if [ $sysLoad -le 17 ]; then export displayLoad=$MYVERTC------; elif [ $sysLoad -le 34 ]; then export displayLoad="$MYVERTC---$MYVERT---"; elif [ $sysLoad -le 51 ]; then export displayLoad="$MYVERTC--$MYVERT--$MYMARRONC--" ; elif [ $sysLoad -le 67 ]; then export displayLoad="$MYVERT--$MYMARRONC--$MYMARRON--"; elif [ $sysLoad -le 84 ]; then export displayLoad="$MYMARRONC--$MYMARRON--$MYROUGE--"; else export displayLoad="$MYMARRON--$MYROUGE--$MYVIOLET--"; fi; echo -n -e $MYMARRONC[$displayLoad$MYMARRONC]' fielse export PROMPT_COMMAND='echo -n -e "\033k$HOSTNAME\033\\"'fi# FANCY PROMPT LINEexport PS1="$GRAS$MARRONC[$VERTC\u$MARRONC@$HOST_COLOR\h$MARRONC \W$MARRONC]$GRISC "~~~~ Voici une version allégée :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Poulpatine Posté(e) le 7 septembre 2012 Auteur Partager Posté(e) le 7 septembre 2012 Au fait, pour l'explication, ce bash_profile permet d'afficher une petite jauge reflétant l'activité de la machine. C'est 'achement pratique . Lien vers le commentaire Partager sur d’autres sites More sharing options...
16ar Posté(e) le 10 septembre 2012 Partager Posté(e) le 10 septembre 2012 pour ton test qui vérifie si tu peux afficher le load, fais le dans une fonction, et appelle la directement dans le PS1 en début ? Je ne sais pas si ca va régler ton probleme, mais le projet que j'ai laché au dessus, il affiche aussi le load si je ne dis pas de bêtises : https://github.com/nojhan/liquidprompt Lien vers le commentaire Partager sur d’autres sites More sharing options...
HPact Posté(e) le 2 novembre 2012 Partager Posté(e) le 2 novembre 2012 Un léger déterrage... J'ai eu le même souci avec un PS1 utilisant des couleurs et des retours à la ligne. La solution a été moi la suivante: "échapper" tout les '[' et ']' utilisés pour changer les couleurs! Mon PS1 ressemble alors à ça: export PS1="\n\[\e[1;36m\]\u@\h \[\e[1;32m\]\w\n\[\e[1;36m\][\D{%a %d %b} \t]\[\e[1;31m\]$ \[\e[m\]" Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.