Comment puis-je raccourcir mon invite de ligne de commande (bash)?

167

Actuellement c'est:

michael@Castle2012-Ubuntu-laptop01:~/Dropnot/webs/rails_v3/linker/spec/controllers$

En dehors de renommer ma machine et ma structure de répertoires ...

Comment pourrais-je faire quelque chose de plus semblable à:

michael:controllers$
Michael Durrant
la source

Réponses:

242

Pour le changer uniquement pour l'instance de terminal actuelle

Il suffit d'entrer PS1='\u:\W\$ 'et appuyez sur Entrée.


Pour le changer "en permanence"

Dans votre ~/.bashrc, trouvez la section suivante:

if ["$ color_prompt" = yes]; ensuite
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ u @ \ h \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ w \ [\ 033 [00m \] \ $ '
autre
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $'
Fi

Supprimez le @\h, et remplacez le \wpar une majuscule \W, de sorte qu'il devienne:

if ["$ color_prompt" = yes]; ensuite
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ u \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ W \ [\ 033 [00m \] \ $ '
autre
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ u: \ W \ $'
Fi

Sauvegardez, quittez, fermez le terminal et démarrez-en un autre pour voir le résultat.


Des tonnes plus d'options!

  • Voir ici pour un howto plus complet, avec beaucoup plus d'options
  • Consultez cette réponse pour utiliser un petit script Python afin de définir l'invite de sorte que le raccourcissement ne se produise que lorsque vous êtes au cœur d'une structure de répertoires.
ish
la source
1
Vous pouvez également avoir beaucoup d'informations ... et ensuite un retour chariot à la fin, comme dans unix.stackexchange.com/q/88780/10043
Michael Durrant
Y a-t-il un moyen de rendre cela mondial? En d’autres termes, si j’ai accès à un autre utilisateur, ce paramètre est-il reporté, mais uniquement pour moi-même (c’est-à-dire pas pour l’utilisateur quand il utilise normalement son compte)?
ctote
Afin d'avoir un fichier .bashrc partagé fonctionnant à la fois sous Linux et OSX, je suis depuis passé à unix.stackexchange.com/a/127800/10043
Michael Durrant
c'est-à-dire HOST='\033[02;36m\]\h' HOST=' '$HOST parse_git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; } TIME='\033[01;31m\]\t \033[01;32m\]' LOCATION=' \033[01;34m\]pwd | sed "s # (/ [^ /] \ {1, \} / [^ /] \ {1, \} / [^ /] \ {1, \} /). * (/ [^ /] \ { 1, \} / [^ /] \ {1, \}) / \ {0,1 \} # \ 1_ \ 2 # g "' BRANCH=' \033[00;33m\]$(parse_git_branch)\[\033[00m\]\n\$ ' PS1=$TIME$USER$HOST$LOCATION$BRANCH PS2='\[\033[01;36m\]>'
Michael Durrant
mais voir la réponse pour le code réel à utiliser.
Michael Durrant
104

Exécuter ce code dans le terminal actuel

PROMPT_DIRTRIM=3

Maintenant, l'invite bash ne montrera que les 3 derniers noms de répertoires. Vous pouvez choisir 1 pour afficher uniquement le répertoire actuel. Plus d'informations sont disponibles dans la documentation GNU .

L'effet:

/var/lib/apt/lists# PROMPT_DIRTRIM=3
/.../lib/apt/lists# 

Si vous voulez le rendre permanent, ajoutez la ligne suivante au ~/.bashrcdébut:

PROMPT_DIRTRIM=3

ou un autre nombre supérieur à zéro.

Santosh Mahto
la source
7
Juste une remarque: Cela nécessite Bash 4.
Stefan Lasiewski
Nice ... J'ai ajouté un bach_alias pour cela (avec une fonction) promptdir() { PROMPT_DIRTRIM=$1; }juste pour rendre la vie plus facile ...
dgoosens
18

Ceci est mon paramètre d'invite préféré:

ajouté dans ~/.bashrc

PS1='[\u@\h \W]\$ '    

ça ressemble à ça:

[user@hostname dirname]$

(avec un espace après le $signe)

intarissable
la source
Comment pourrais-je ajouter un espace entre chaque mot? Aussi, puis-je le colorier?
Daniel Springer
6

Personnellement, je préfère ne voir que le dossier actuel dans l'invite bash. Je peux le faire avec la commande suivante:

PS1='\W\$ '

Si vous voulez qu'il prenne effet après chaque démarrage, ajoutez la commande ci-dessus dans votre ~ / .bashrc.

Rajeev Jayaswal
la source
1

Je réalise que c'est très vieux, mais puisque personne n'a suggéré de créer un alias, je me suis dit que je posterais. Utilisation de séquences d'échappement d'invite de Bash, j'ai créé un aliasshorten

Dans ~/.bash_aliasesici , vous remarquerez le $ bleu var pour définir la couleur rapide que vous pouvez omettre ou modifier en fonction de préférence je clair aussi le terminal lors de l' appel raccourcissent.

alias c='clear'

alias shorten='PS1="$Blue$USER:\W$ "&& c'

Pour obtenir la chaîne d'invite souhaitée par l'OP:

alias shorten='PS1="$USER:\W$ "'

J'ai des couleurs définies en ~/.bashrccopie et collées à partir de https://wiki.archlinux.org/index.php/Color_Bash_Prompt . Sur une note de côté ce qui est avec les couleurs de code Ansi? Je suis confus juste en le regardant.

Blue='\e[0;34m'         # Blue
Allie Carver
la source
Un guide pas à pas pour cela serait si utile que je n'ai aucune idée de comment accéder à .bash_aliases. Merci
Kayote
2
"." préfixe indique un répertoire ou un fichier caché. Le tilde "~" est la forme abrégée de la variable $ HOME. Ainsi, "~ / .bash_aliases" est simplement la forme abrégée de "/home/$USER/.bash_aliases". Pour ouvrir ".bash_aliases", vous pouvez soit ouvrir un terminal et taper "gedit /home/$USER/.bash_aliases" ou "gedit ~ / .bash_aliases" ou dans votre répertoire personnel, tapez ctrl-h pour afficher les fichiers cachés et ouvrir le fichier directement. . J'espère que ça t'as aidé. Vous pouvez également effectuer une recherche sur Google pour trouver des alias utiles.
Allie Carver
0

J'ai écrit une fonction que vous pouvez modifier selon vos besoins:

function termprompt() {
    PS1="${PS1//@\\h/}"     # Remove @host
    PS1="${PS1//\\w/\\W}"   # Change from full directory to last name
}

Placez cette fonction au bas de ou ~/.bashrcaprès que la PS1ligne ait été entièrement calculée.

Vous pouvez taper termpromptchaque fois que vous souhaitez raccourcir votre invite ou que vous avez termpromptappelé depuis le bas de votre poste ~/.bashrcpour obtenir une permanence.

L'avantage de cette technique par rapport à de nombreuses autres réponses est la .bashrcpossibilité de configurer PS1de quatre manières différentes (xterm + no-color, xterm + color, no-xterm + no-color, no-xterm + color). Cette réponse prend en charge les quatre méthodes actuelles et probablement aussi les méthodes futures.

Un autre avantage est que cette méthode a moins de codes de contrôle complexes à traverser pour insérer vos modifications.

WinEunuuchs2Unix
la source