GNU/Linux >> Linux Esercitazione >  >> Linux

Mostra solo il nome della directory corrente (non il percorso completo) al prompt di bash

Cambia il \w (minuscolo) a \W (maiuscolo):

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

Dai un'occhiata al Bash Prompt HOWTO per molti dettagli divertenti. esempio:

[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$

Il PROMPT_COMMAND variabile, se impostata, è un comando che viene eseguito prima di visualizzare il prompt specificato in PS1 . Nel tuo caso, PROMPT_COMMAND esegue un echo istruzione con alcune sequenze di escape ANSI che manipolano la barra del titolo di un Xterm.

Se sospetti che il tuo PROMPT_COMMAND sta sovrascrivendo il tuo PS1 richiesta, puoi unset e testare le cose:

$ unset PROMPT_COMMAND

Infine, assicurati di modificare il PS1 definizione che effettivamente viene utilizzata. Le posizioni comuni sono /etc/bash.bashrc , /etc/profile , ~/.bashrc , ~/.bash_profile , ~/.profile . I file di sistema sono generalmente (ma non sempre) eseguiti prima dei file utente.


Il semplice comando di sostituzione bash è

${VAR/pattern_to_find/pattern_to_replace}

Per mostrare l'ultima directory puoi semplicemente fare ${PWD/*\//} , ovvero trova qualsiasi cosa prima e inclusa l'ultima '/ ' e sostituiscilo con niente.

Sulla mia macchina Ubuntu uso:

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

La mia soluzione è mostrare le prime tre e le ultime due directory quando ce ne sono più di 5

Quindi il mio prompt (che contiene anche altre informazioni) è simile a:

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

quando il mio pwd è effettivamente

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

Il mio prompt PS1 è impostato come segue:

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 è una funzione che mostra il ramo git corrente, lo tengo nei miei file dot, è:

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

Linux
  1. Ottieni il percorso completo da Bash Script?

  2. Come eseguire il comando "trova" solo sulla directory corrente e non sulle sottodirectory

  3. Rimuovi solo i file nella directory su Linux NOT directory

  4. Imposta il prompt del terminale in Ubuntu per mostrare solo il nome della directory di lavoro invece del suo percorso completo

  5. Come visualizzare il percorso corrente nel prompt dei comandi in sh di Linux (non bash)?

Directory corrente abbreviata nel prompt della shell?

Aggiungi uno script bash al percorso

Come si configura il prompt dei comandi in Linux per mostrare la directory corrente?

Il prompt bash di Docker non visualizza l'output a colori

Comando Conda che funziona nel prompt dei comandi ma non nello script bash

Come eseguire uno script bash tramite percorso assoluto?