GNU/Linux >> Tutoriels Linux >  >> Linux

Afficher uniquement le nom du répertoire actuel (pas le chemin complet) à l'invite bash

Changez le \w (minuscule) à \W (majuscule):

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
                                                                                       ^^
           this one waaaaaay over here ------------------------------------------------+    

Jetez un œil au Bash Prompt HOWTO pour de nombreux détails amusants. exemple :

[email protected]:/usr/local/bin$ echo $PS1
${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\[email protected]\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ 

[email protected]:/usr/local/bin$ export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\[email protected]\h\[\033[00m\]:\[\033[01;36m\]\W\[\033[00m\]\$ '

[email protected]:bin$

Le PROMPT_COMMAND la variable, si définie, est une commande qui est exécutée avant d'afficher l'invite spécifiée dans PS1 . Dans votre cas, PROMPT_COMMAND exécute un echo avec certaines séquences d'échappement ANSI qui manipulent la barre de titre d'un Xterm.

Si vous suspectez votre PROMPT_COMMAND remplace votre PS1 invite, vous pouvez unset et testez les choses :

$ unset PROMPT_COMMAND

Enfin, assurez-vous que vous modifiez le PS1 définition qui est effectivement utilisée. Les emplacements communs sont /etc/bash.bashrc , /etc/profile , ~/.bashrc , ~/.bash_profile , ~/.profile . Les fichiers système sont généralement (mais pas toujours) exécutés avant les fichiers utilisateur.


La commande simple bash replace est

${VAR/pattern_to_find/pattern_to_replace}

Pour afficher le dernier répertoire, vous pouvez simplement faire ${PWD/*\//} , c'est-à-dire trouver n'importe quoi avant et y compris le dernier '/ ' et remplacez-le par rien.

Sur ma machine ubuntu j'utilise :

export PS1='$(whoami):${PWD/*\//}#'. 

Ma solution consiste à afficher les trois premiers et les deux derniers répertoires lorsqu'il y en a plus de 5

Donc, mon invite (qui contient également d'autres informations) ressemble à :

08:38:42 durrantm U2017 /home/durrantm/Dropbox/_/rails/everquote

quand mon mot de passe est en fait

/home/durrantm/Dropbox/93_2016/work/code/ruby__rails/rails/everquote

Mon invite PS1 est configurée comme suit :

HOST='\[\033[02;36m\]\h'; HOST=' '$HOST
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\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH

git_branch est une fonction qui montre la branche git actuelle, je la garde dans mes dotfiles, c'est :

git_branch () {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
  }

Linux
  1. Commande introuvable dans Bash corrigé

  2. Comment entrer dans un répertoire dont le nom n'est qu'un moins ?

  3. Mettez en surbrillance les séparateurs de chemin dans Ps1 ?

  4. Obtenir le chemin d'accès complet d'un répertoire donné ?

  5. Ajouter un script bash au chemin

Répertoire actuel abrégé dans l'invite du shell ?

Comment configurer l'invite de commande sous Linux pour afficher le répertoire actuel ?

Définissez l'invite du terminal dans Ubuntu pour afficher uniquement le nom du répertoire de travail au lieu de son chemin complet

Comment afficher le chemin actuel dans l'invite de commande dans le sh (pas bash) de Linux ?

Comment exécuter un script bash via un chemin absolu ?

Comment raccourcir le chemin du répertoire actuel affiché sur le terminal ?