Jump to content

Problème de PROMT_COMMAND


Recommended Posts

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_COMMAND

PS1 $

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

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 :

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 !

Link to comment
Share on other sites

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)

Link to comment
Share on other sites

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 ?

Link to comment
Share on other sites

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 ?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 1 month later...

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\]"
Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...