Nasconde la directory di lavoro corrente nel terminale


133

Come impostazione predefinita, il prompt del terminale mostra qualcosa come:

user@system:/folder1/folder2/folder3/folder4$

più in profondità si va nel filesystem, meno spazio rimane per la digitazione dei comandi. Posso cambiarlo per mostrare solo qualcosa del tipo:

>

Voglio dire, posso solo digitare pwdper mostrare dove sono. ;)


1
Questo dovrebbe essere un commento ma non posso commentare, scusa. Oltre a nascondere la directory corrente, il seguente valore PS1 separerà visivamente i comandi bash:export PS1="\n___"
Hello World,

sperimentato sulle soluzioni di Oli. I caratteri a colori funzionano bene nel terminale: export PS1 = '[\ 033 [0; 35m] \ h [\ 033 [0; 33m] \ w [\ 033 [00m]:'
linbianxiaocao

Risposte:


153
export PS1='\u@\h: '

Ciò si traduce in oli@bert:una mia richiesta.

Se vuoi davvero qualcosa di minimalista come chiedi, prova questo:

export PS1='> '

Puoi allegarlo alla fine del tuo ~/.bashrcfile per farlo persistere tra gli accessi.

Puoi anche essere creativo con alcuni colori. Ecco cosa utilizzo sui miei server:

export PS1='\[\033[0;35m\]\h\[\033[0;33m\] \w\[\033[00m\]: '

Dare (è più facile vedere su uno sfondo completamente nero):

I miei terminali

Glossario di caratteri accettabili in PS1


2
Puoi anche avere newline (\ n) come parte del prompt, in modo da poter mettere tutte le informazioni e '>' su righe separate.
ak2

Ho incontrato per la prima volta questo tipo di personalizzazione della shell "estrema" in msysGit, che ci crediate o no. Sono stato immediatamente convertito al mondo di Bash. Avere tutte le informazioni (la mia directory corrente, il ramo corrente estratto dal repository Git, lo stato dell'indice Git ...) è stato davvero fantastico. Ho intenzione di fare qualcosa di simile con l'installazione di Ubuntu che ho recentemente installato su un vecchio laptop (insieme a Windows XP).
dgw,

3
qual è il formato utilizzato per impostare i colori?
Rakib

1
@SyedRakibAlHasan Prova echo -e "\e[31mHello World\e[0m"o echo -e "\033[31mHello\e[0m World"in un terminale, questo dovrebbe darti un indizio. fonte
daka

103

Solo per espandere la risposta di Oli (e in modo che io abbia un segnalibro per quei simboli abbreviati):

Il prompt di bash ( stefano@linux:~$) è solo il primo di un paio di prompt che potresti vedere:

  • PS1 : il prompt predefinito che vedi quando apri una shell

    Il valore è memorizzato in una variabile di ambiente chiamata PS1. Per vedere il suo valore, digitare

    echo $PS1

    Questo ti darà qualcosa di simile

    \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

    Per modificarlo, puoi impostare un nuovo valore per la variabile:

    export PS1="\u > "

    Ciò comporterà un prompt come questo:

    stefano > 
  • PS2 : è il tuo prompt secondario. Questo viene mostrato quando un comando non è finito. Digita echo "asde premi invio, il prompt secondario ti consentirà di inserire più righe fino alla chiusura delle virgolette.

  • PS3 è il prompt utilizzato per select(2)

  • PS4 è il prompt utilizzato per la testo alternativo pila tracce (default: +)

Per rendere permanenti le modifiche, le aggiungi alla fine di .bash_profile(o .bashrc, vedi questa domanda ) nella tua home directory.

Ecco un elenco più o meno completo di stenografia che è possibile utilizzare durante la composizione di questi:

  • \a     Il carattere "campana"
  • \A     24 ore
  • \d     Data (es. Mar 21 dic)
  • \e     Il personaggio 'fuga'
  • \h     Nome host (fino al primo ".")
  • \H     Nome host
  • \j     Numero di lavori attualmente in esecuzione (ps)
  • \l     Tty attuale
  • \n     Avanzamento riga
  • \t     Tempo (hh: mm: ss)
  • \T     Tempo (hh: mm: ss, formato 12h)
  • \r     Ritorno del trasporto
  • \s     Shell (cioè bash, zsh, ksh ..)
  • \u     Nome utente
  • \v     Versione Bash
  • \V     Stringa di rilascio Full Bash
  • \w     Directory di lavoro corrente
  • \W     Ultima parte della directory di lavoro corrente
  • \!     Indice attuale nella storia
  • \#     Indice di comando
  • \$     Un "#" se sei root, altrimenti "$"
  • \\     Backslash letterale
  • \@     Ora (formato 12h con am / pm)

Puoi ovviamente inserire qualsiasi stringa letterale e qualsiasi comando:

export PS1="\u \$(pwd) > "

Dove $(pwd)sta al posto di "l'output di" pwd.

  • Se il comando di sostituzione viene escluso, come in \$(pwd), viene valutato ogni volta che viene visualizzato il prompt, altrimenti, come in $(pwd), viene valutato solo una volta all'avvio di bash.

Se vuoi che il tuo prompt includa i colori, puoi usare i codici colore di bash per farlo. Il codice è composto da tre parti:

40;33;01
  • La prima parte prima del punto e virgola rappresenta lo stile del testo.

    • 00 = none
    • 01 = grassetto
    • 04 = sottolineano
    • 05 = lampeggio
    • 07 = inversa
    • 08 = nascosto
  • La seconda e la terza parte sono il colore e il colore di sfondo:

    • 30 = nero
    • 31 = rosso
    • 32 = verde
    • 33 = giallo
    • 34 = blu
    • 35 = magenta
    • 36 = cyan
    • 37 = bianco

Ogni parte può essere omessa, supponendo che inizi a sinistra. vale a dire "1" significa grassetto, "1; 31" significa grassetto e rosso. E faresti stampare il tuo terminale a colori sfuggendo alle istruzioni \33[e terminandolo con un m. 33, o 1B in esadecimale, è il segno ASCII "ESCAPE" (un carattere speciale nel set di caratteri ASCII). Esempio:

"\33[1;31mHello World\33[m"

Stampa "Hello World" in rosso brillante.


I allegata export PS1='\[\033[1;31m\]\w\[\033[00m\] \$> 'al /etc/bash.bashrcma nulla sembra aver cambiato ... funziona su una per ogni sessione, ma i cant sembrano renderlo permanente.
Jared Tritsch,

8

Un'altra alternativa è abbreviare il percorso della directory di lavoro quando diventa troppo lungo: tagliare la directory di lavoro del prompt dei comandi del terminale

Crea un piccolo script Python che implementa la logica di taglio desiderata.

Esempio: ~ / short.pwd.py

import os
from commands import getoutput
from socket import gethostname
hostname = gethostname()
username = os.environ['USER']
pwd = os.getcwd()
homedir = os.path.expanduser('~')
pwd = pwd.replace(homedir, '~', 1)
if len(pwd) > 30:
    pwd = pwd[:10]+'...'+pwd[-20:] # first 10 chars+last 20 chars
print '[%s@%s:%s] ' % (username, hostname, pwd)

Ora provalo, da un terminale:

export PROMPT_COMMAND='PS1="$(python ~/.short.pwd.py)"'

Se sei d'accordo con il risultato, aggiungi il comando nel tuo ~ / .bashrc


Exa ... ~ / short.pwd.py, export ... ~ / .short.pwd.py Penso che entrambi debbano essere uguali. O metti un comando extra in entrambi i posti o non lo fai affatto. Ma questa è un'ottima risposta ..
MycrofD,

7

Spesso voglio farlo temporaneamente. Ecco cosa faccio:

$ export OLD_PS1=$PS1                    # save Long Prompt to OLD_PS1
$ export PS1="\u > "export PS1="\u $ "   # change to PS1 to Short Prompt
$ export PS1=$OLD_PS1                    # restore Long Prompt to PS1

Spero che questo aiuti qualcuno.


1

per utenti macOS:

open ~/.bash_profile

alla fine del file aggiungi la seguente riga e salvala

export PS1='\u:\w\$ '

risultato nella directory home:

user: ~$

qui per l'utente w per la directory di lavoro corrente $ richiede di visualizzare

puoi provare i seguenti stili:

export PS1='$ '

avere solo $ come prompt, nient'altro. proprio come:

$ 

0

La cosa che mi ha aiutato è stata: export PS1 = '$'

Per farlo ogni volta che apri il terminale, scrivi il comando alla fine di .bashrc che puoi aprire con 'cd' seguito da 'gedit .bashrc'.

Spero che sia di aiuto. Ha funzionato per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.