September 5, 201213 yr 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 !
September 6, 201213 yr 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.
September 6, 201213 yr Author 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.
September 7, 201213 yr 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)
September 7, 201213 yr Author 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é
September 7, 201213 yr Author Mon bash est à jour oui, je n'utilise pas zsh et je ne peux pas l'installer sur toute ma prod .
September 7, 201213 yr 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 ?
September 7, 201213 yr Author 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 ?
September 7, 201213 yr 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 ?
September 7, 201213 yr Author # .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 :)
September 7, 201213 yr Author 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 .
September 10, 201213 yr 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
November 2, 201213 yr 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\]"
Archived
This topic is now archived and is closed to further replies.