Posté(e) le 5 septembre 201212 a 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 !
Posté(e) le 6 septembre 201212 a 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.
Posté(e) le 6 septembre 201212 a Auteur 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.
Posté(e) le 7 septembre 201212 a 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)
Posté(e) le 7 septembre 201212 a Auteur 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é
Posté(e) le 7 septembre 201212 a Auteur Mon bash est à jour oui, je n'utilise pas zsh et je ne peux pas l'installer sur toute ma prod .
Posté(e) le 7 septembre 201212 a 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 ?
Posté(e) le 7 septembre 201212 a Auteur 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 ?
Posté(e) le 7 septembre 201212 a 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 ?
Posté(e) le 7 septembre 201212 a Auteur # .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 :)
Posté(e) le 7 septembre 201212 a Auteur 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 .
Posté(e) le 10 septembre 201212 a 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
Posté(e) le 2 novembre 201212 a 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\]"
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.