Aller au contenu

Problème de PROMT_COMMAND


Poulpatine

Messages recommandés

Posté(e)

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 :

  Citation
PROMPT_COMMAND

PS1 $

Je peux taper une ligne entière sans rencontrer deproblème.

  Citation
PROMPT_COMMAND

PS1 $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 :

  Citation
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 :

  Citation
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)

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)

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)

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)

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)
# .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 :)

  • 1 mois après...
Posté(e)

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.

×
×
  • Créer...