Come colorare il prompt di Powershell?


17

Ho sempre richiesto di essere di questo colore nel mio Linux. Poi posso trovare il mio input nella finestra di comando nera. Ma possiamo fare lo stesso colore nel mio Powershell ?


Qual è il carattere della console?
Dmitry Kudriavtsev il

@DmitryKudriavtsev Guarda questo , forse è la canzone dei Sim in inglese.
yode

Questo è forse SimSun?
Dmitry Kudriavtsev il

@DmitryKudriavtsev Sì, scusa se ho fatto un errore.
yode

non è colpa tua, la traslitterazione è dura
Dmitry Kudriavtsev il

Risposte:


32

screenshot del prompt colorato

Istruzioni di PowerShell

Quello che vuoi fare è personalizzare il prompt .

Il prompt predefinito in PowerShell 3.0 e versioni successive è:

function prompt  
{  
    "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "  
}

Sequenze di escape del colore

Ora, Windows 10 supporta i codici di escape ANSI nel suo conhost e il colore a 24 bit è supportato dal 1703.

Per utilizzare uno dei codici di escape ANSI, è necessario un carattere ESC letterale . Questo è 033 ottale, o 27 decimale. In Bash, useresti "\033"o "\e"; Non esiste una sequenza equivalente diretta in PowerShell ma puoi invece incorporare un'espressione:"$([char]27)"

In PowerShell Core è invece possibile utilizzare la "`e"sequenza di escape. Grazie al commento di asherber.


Utilizzare in PowerShell

Ciò significa che è possibile, ad esempio, utilizzare la seguente sequenza di escape per impostare il colore di sfondo su ciano con il codice 46:

"$([char]27)[46m"

Quale può essere usato così:

echo "$([char]27)[46mColoured text"

Per rendere le cose più leggibili, definiamo una variabile:

$ESC = [char]27

Quindi possiamo usare:

"$ESC[46m"

Dov'è $ESCil carattere letterale ESC, [definisce l'inizio dell'elenco dei parametri e mla fine.

Usandolo in un comando:

echo "$ESC[46mColoured text"

E per ripristinare le impostazioni di colore originali, utilizziamo 0invece il codice :

echo "$ESC[46mColoured text$ESC[0mUncoloured text"

Colori più avanzati

Se non sei soddisfatto della tavolozza base a 16 colori, puoi utilizzare i colori a 24 bit con il modulo:

"$ESC[48;2;<r>;<g>;<b>m"

Dove si <r>trova il valore decimale per il rosso da 0 a 255, <g>per il verde e <b>per il blu, ad es"$ESC[48;2;255;0;123m"

Per ulteriori informazioni, consultare la documentazione .

In realtà, questo è direttamente equivalente a quello che faresti in bash, tranne che devi usare $ESC(dopo averlo definito) invece di \eo \033.


Impostazione di un prompt colorato

Mettendo insieme questi, possiamo usare i codici di escape del colore ANSI in un prompt modificato per cambiare il colore di sfondo:

function prompt  
{  
    $ESC = [char]27
    "$ESC[46mPS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) $ESC[0m"  
}

Persistenza

Se vuoi che questo persista per tutte le sessioni, aggiungilo al tuo profilo (come .bashrc). Puoi visualizzare il percorso del tuo profilo in $profile.


Ciao ~, è un'ottima risposta..Ma ancora di più, potremmo rendere il testo in stile grassetto ? Quindi possiamo trovarlo più facile ..
yode

1
@yode È più o meno tutto documentato qui , che ho collegato nella risposta;)
Bob

1
@yode Ah. Se si confronta con 37 bianchi non luminosi, sembra che le finestre di PowerShell utilizzino già 97 bianco brillante per impostazione predefinita. (tra l'altro, ci sarà una nuova tavolozza di colori per installazioni pulite della prossima versione di Win10. Ci sono alcuni screenshot lì della tavolozza corrente ; nota che 1;37mè lo stesso di 97mentrambi, che significano entrambi "bianco brillante")
Bob

1
@yode Fondamentalmente, conhost non supporta ancora il grassetto. Bright è un sostituto di grassetto e per impostazione predefinita stai già utilizzando il colore brillante. Se vuoi davvero il grassetto, puoi usare un terminale alternativo, come ConEmu - ma sembra che il loro supporto per il grassetto ANSI non sia completo. IMO, non vale la pena.
Bob,

1
Non riesco a far funzionare correttamente Markdown, ma in PowerShell Core puoi usare backtick + e per [char]27. Non sono sicuro che sia stato aggiunto nelle versioni precedenti.
asherber,
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.