« Bash : Prompt avec statut SVN » : différence entre les versions

De Adadov.net wiki
Page créée avec « <syntaxhighlight lang="bash"> # Colors NoColor="\e[0;0m" Cyan="\e[0;36m" Green="\e[0;32m" Red="\e[0;31m" Yellow="\e[0;33m" # Prompts chars UserPrompt="$" RootPrompt="#" ... »
 
Aucun résumé des modifications
 
(28 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
{{Obsolète}}
{{Auteur|Adadov}}
== Présentation ==
C'est suite à la lecture de [http://blog.nicolargo.com/2012/02/configurer-votre-prompt-bash.html cet article] que j'ai décidé moi aussi de rafraîchir mon prompt.
Donc j'ai décidé de faire une petite variante, pour ma part je n'utilise pas GIT mais SVN.
J'ai donc repris la base qui était si bien expliquée et je l'ai un peu modifiée pour trois raisons.
# J'utilise Fedora et je ne connais pas Ubuntu mais je suppose qu'il existe de menues différences
# J'utilise SVN et non GIT. (Il serait tout à fait imaginable de faire un prompt qui gère les deux d'ailleurs ...)
# Je voulais conserver le comportement initial de $PROMPT_COMMAND qui, sous Fedora, adapte le titre de mon terminal (plus facile pour le repérer parmi les 50 ouverts)
J'en ai en plus profité pour sortir ce morceau de code du fichier .bashrc et le placer dans un endroit où il est valable pour tout le système. Il est donc situé dans /etc/profile.d/custom.sh.
== Captures d'écran ==
Voilà le prompt standard :
[[Image:prompt-std.png]]
Le prompt lorsqu'on se situe dans un répertoire géré par SVN qui possède des fichiers modifiés dans le répertoire lui même ou ses sous répertoires :
[[Image:prompt-uncommit.png]]
Le prompt lorsqu'on se situe dans un répertoire géré par SVN où le répertoire et les sous répertoires sont à jour :
[[Image:prompt-commit.png]]
== Fichier custom.sh ==
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
# Colors
# Colors
Ligne 22 : Ligne 53 :
RIGHTPROMPT=""
RIGHTPROMPT=""
let RIGHTSIZE=0
let RIGHTSIZE=0
SVNSTATUS=$(svn status 2>&1)
if [ -d ".svn" ]; then
echo $SVNSTATUS | grep 'not a working copy' > /dev/null 2>&1
SVNSTATUS=$(svn status 2>&1)
if [ $? -eq 1 ]; then
echo $SVNSTATUS | grep 'not a working copy' 2>&1 > /dev/null
echo $SVNSTATUS | grep -P '^\s*[AMDCR]' 2>&1 > /dev/null
if [ $? -eq 1 ]; then
if [ $? -eq 0 ]; then
echo $SVNSTATUS | grep -P '\s[AMDCR]\s' 2>&1 > /dev/null
RIGHTPROMPT=$Red
if [ $? -eq 0 ]; then
else
RIGHTPROMPT=$Red
RIGHTPROMPT=$Green
else
RIGHTPROMPT=$Green
fi
BRANCH=$(svn info | grep 'Repository Root' | sed -r 's|^.*/([a-z]+)$|\1|')
RIGHTPROMPT=$RIGHTPROMPT"[SVN Repository $BRANCH]"
let RIGHTSIZE=$(echo -n "[SVN Repository $BRANCH]" | wc -c)
fi
fi
BRANCH=$(svn info | grep 'Repository Root' | sed -r 's|^.*/([a-z]+)$|\1|')
RIGHTPROMPT=$RIGHTPROMPT"[SVN Repository $BRANCH]"
let RIGHTSIZE=$(echo -n "[SVN Repository $BRANCH]" | wc -c)
fi
fi


Ligne 43 : Ligne 76 :
echo -e $RIGHTPROMPT
echo -e $RIGHTPROMPT
}
}
# Define PROMPT_COMMAND if not already defined (fix: Modifying title on SSH connections)
if [ -z "$PROMPT_COMMAND" ]; then
case $TERM in
xterm*)
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
;;
screen)
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
;;
esac
fi


# Main prompt
# Main prompt
PROMPT_COMMAND=prompt
PROMPT_COMMAND="prompt;$PROMPT_COMMAND"
 
if [ $EUID -ne 0 ]; then
if [ $EUID -ne 0 ]; then
PS1=$UserPrompt" "
PS1=$UserPrompt" "
Ligne 52 : Ligne 98 :
fi
fi
</syntaxhighlight>
</syntaxhighlight>
[[Category:Linux]]

Dernière version du 19 mai 2018 à 15:51

Article obsolète.
Cet article a été marqué comme obsolète, vous devriez chercher des informations plus à jour.
Ecrit Par : Adadov

Présentation[modifier | modifier le wikicode]

C'est suite à la lecture de cet article que j'ai décidé moi aussi de rafraîchir mon prompt.

Donc j'ai décidé de faire une petite variante, pour ma part je n'utilise pas GIT mais SVN.

J'ai donc repris la base qui était si bien expliquée et je l'ai un peu modifiée pour trois raisons.

  1. J'utilise Fedora et je ne connais pas Ubuntu mais je suppose qu'il existe de menues différences
  2. J'utilise SVN et non GIT. (Il serait tout à fait imaginable de faire un prompt qui gère les deux d'ailleurs ...)
  3. Je voulais conserver le comportement initial de $PROMPT_COMMAND qui, sous Fedora, adapte le titre de mon terminal (plus facile pour le repérer parmi les 50 ouverts)

J'en ai en plus profité pour sortir ce morceau de code du fichier .bashrc et le placer dans un endroit où il est valable pour tout le système. Il est donc situé dans /etc/profile.d/custom.sh.

Captures d'écran[modifier | modifier le wikicode]

Voilà le prompt standard :

Le prompt lorsqu'on se situe dans un répertoire géré par SVN qui possède des fichiers modifiés dans le répertoire lui même ou ses sous répertoires :

Le prompt lorsqu'on se situe dans un répertoire géré par SVN où le répertoire et les sous répertoires sont à jour :

Fichier custom.sh[modifier | modifier le wikicode]

# Colors
NoColor="\e[0;0m"
Cyan="\e[0;36m"
Green="\e[0;32m"
Red="\e[0;31m"
Yellow="\e[0;33m"

# Prompts chars
UserPrompt="$"
RootPrompt="#"

# Contextual prompt
prompt() {
	USERNAME=`whoami`
	HOSTNAME=`hostname`
	CURRENTPATH=`pwd | sed "s|$HOME|~|g"`
	
	LEFTPROMPT=$Cyan$USERNAME@$HOSTNAME":"$Yellow$CURRENTPATH
	let LEFTSIZE=$(echo -n "$USERNAME@$HOSTNAME:$CURRENTPATH" | wc -c)

	RIGHTPROMPT=""
	let RIGHTSIZE=0
	if [ -d ".svn" ]; then
		SVNSTATUS=$(svn status 2>&1)
		echo $SVNSTATUS | grep 'not a working copy' 2>&1 > /dev/null
		if [ $? -eq 1 ]; then
			echo $SVNSTATUS | grep -P '\s[AMDCR]\s' 2>&1 > /dev/null
			if [ $? -eq 0 ]; then
				RIGHTPROMPT=$Red
			else
				RIGHTPROMPT=$Green
			fi
			BRANCH=$(svn info | grep 'Repository Root' | sed -r 's|^.*/([a-z]+)$|\1|')
			RIGHTPROMPT=$RIGHTPROMPT"[SVN Repository $BRANCH]"
			let RIGHTSIZE=$(echo -n "[SVN Repository $BRANCH]" | wc -c)
		fi
	fi

	let BLANCKSIZE=${COLUMNS}-${LEFTSIZE}-${RIGHTSIZE}
	RIGHTPROMPT=$RIGHTPROMPT$NoColor

	echo -e -n "\n"$LEFTPROMPT
	printf "%$(($BLANCKSIZE))s"
	echo -e $RIGHTPROMPT
}

# Define PROMPT_COMMAND if not already defined (fix: Modifying title on SSH connections)
if [ -z "$PROMPT_COMMAND" ]; then
	case $TERM in
	xterm*)
		PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
	;;
	screen)
		PROMPT_COMMAND='printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
	;;
	esac
fi

# Main prompt
PROMPT_COMMAND="prompt;$PROMPT_COMMAND"

if [ $EUID -ne 0 ]; then
	PS1=$UserPrompt" "
else
	PS1=$RootPrompt" "
fi