Mon terminal a un format d’invite par défaut comme celui-ci:
nom d'utilisateur @ nom de la boîte/chemin/vers/courant/répertoire $
Le code qui le produit ressemble à ceci: (il a aussi des définitions de couleurs)
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
Si le chemin d'accès au répertoire en cours devient trop long, il devient désagréable de travailler avec le terminal car vous cassez constamment des lignes. Dans de tels cas, je préférerais un format produisant une chaîne plus courte comme celle-ci:
nom d'utilisateur @ nom de boîte nom_répertoire_actuel $
Le code qui le produit ressemble à ceci (encore une fois avec la couleur):
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
Est-ce que quelqu'un sait comment je pourrais facilement basculer le format de la fenêtre de terminal actuelle d'un style à l'autre en tapant par exemple: prompttoggle
?
Stockez vos variables PS1
longues et courtes sous un nom différent:
PS1short='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
PS1long='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
Assurez-vous de définir initialement PS1
sur l'un d'entre eux:
PS1="$PS1long"
Vous pouvez ensuite créer un alias comme celui-ci pour basculer entre les deux valeurs PS1:
alias prompttoggle='if test "$PS1" = "$PS1long" ; then PS1="$PS1short" ; else PS1="$PS1long" ; fi'
Ajouter les quatre lignes à votre fichier ~/.bashrc
aura comme conséquence la commande disponible dans vos sessions Bash, les voici à nouveau pour une copie plus facile:
PS1short='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
PS1long='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
PS1="$PS1long"
alias prompttoggle='if test "$PS1" = "$PS1long" ; then PS1="$PS1short" ; else PS1="$PS1long" ; fi'
Vous pouvez utiliser une petite fonction bash
:
prompttoggle () {
if [[ $PS1 = *basename* ]]; then
export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
else
export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
fi ;}
La fonction ci-dessus correspond si le $PS1
actuel contient basename
, si oui, alors le PS1
sans basename
est défini, sinon celui avec basename
est défini.
Mettez la fonction dans votre ~/.bashrc
pour la rendre disponible dans toutes les sessions interactives.
Exemple:
foo@bar:~/spam/Egg$ prompttoggle () {
> if [[ $PS1 = *basename* ]]; then
> export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
> else
> export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
> fi ;}
foo@bar:~/spam/Egg$ prompttoggle
foo@bar Egg $ prompttoggle
foo@bar ~/spam/Egg $
Ou ... créez deux très petites fonctions et ajoutez-les à la fin de votre ~/.bashrc
# short Prompt
promptshort() { export PS1=$(echo "$PS1" | sed 's/\\w/\\W/g') ; }
# full length Prompt
promptlong() { export PS1=$(echo "$PS1" | sed 's/\\W/\\w/g') ; }
pour une invite raccourcie, tapez promptshort
, pour revenir au chemin complet, tapez promptlong
\W
affiche uniquement le répertoire de travail en cours pour que $(basename ${PWD})
soit overkill imho
Vous pouvez combiner une seule fonction mais "long" et "court" sont descriptifs et comportent moins de frappes au clavier que "bascule";)
Au lieu d'ajouter une ligne pour remplacer PS1, je préfère modifier le code qui le définit (par exemple, annulez le commentaire force_color_Prompt=yes
et modifiez la ligne après [ "$color_Prompt" = yes ]; then
).
Voici une définition de fonction ~/.bashrc
que j’utilise personnellement pour réinitialiser/basculer mon invite d’invite régulière à simplement $
. Adaptez-le selon vos besoins.
resetps() {
if [ "$PS1" = "$ " ]
then
PS1=$OLDPS1
else
OLDPS1=$PS1
export OLDPS1
PS1="$ "
fi
}
C’est une réponse à votre problème (de longs répertoires coupent la ligne de commande) et pas spécifiquement à votre question (comment changer l’invite de commande à la volée).
J'ai résolu ce problème il y a des années avec cette invite:
PS1='\[\e[32;1m\]$? \u@\h \[\e[35;1m\]\w\[\e[m\]\n\$ '
# └──green───┘ └──purple──┘ └─norm─┘
Qu'est-ce que cela fait:
Cela vous donne tout l’espace dont vous avez besoin pour votre commande, ne le décale pas correctement lorsque vous êtes dans une structure de répertoire profonde, ne modifie pas la ligne de frappe avec des codes de couleur (évitant ainsi l’éventualité de bugs étranges) indice sur l'endroit où la sortie d'une commande s'est terminée et la suivante commencée: