Zawsze podsuwam monit o bycie tym kolorem w moim systemie Linux. Następnie mogę znaleźć swoje wejście w czarnym oknie poleceń. Ale czy możemy zrobić ten sam kolor w mojej Powershell ?
Zawsze podsuwam monit o bycie tym kolorem w moim systemie Linux. Następnie mogę znaleźć swoje wejście w czarnym oknie poleceń. Ale czy możemy zrobić ten sam kolor w mojej Powershell ?
Odpowiedzi:
To, co chcesz zrobić, to dostosować monit .
Domyślny monit w programie PowerShell 3.0 i nowszym to:
function prompt
{
"PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) "
}
Teraz, Windows 10 podpory te kody ucieczki ANSI w swojej conhost i 24-bitowa głębia kolorów jest obsługiwany od 1703 roku.
Aby użyć jednego z kodów ucieczkowych ANSI, potrzebujemy dosłownego znaku ESC . Jest to ósemkowa 033 lub dziesiętna 27. W Bash użyłbyś "\033"
lub "\e"
; W programie PowerShell nie ma bezpośredniej równoważnej sekwencji, ale zamiast tego można osadzić wyrażenie:"$([char]27)"
W PowerShell Core można "`e"
zamiast tego użyć sekwencji ucieczki. Dzięki komentarzowi asherbera.
Oznacza to, że możesz na przykład użyć następującej sekwencji zmiany znaczenia, aby ustawić kolor tła na niebieskozielony za pomocą kodu 46
:
"$([char]27)[46m"
Które można wykorzystać tak:
echo "$([char]27)[46mColoured text"
Aby wszystko było bardziej czytelne, zdefiniujmy zmienną:
$ESC = [char]27
Możemy więc użyć:
"$ESC[46m"
Gdzie $ESC
jest dosłowny znak ESC, [
określa początek listy parametrów i m
koniec.
Używanie go w poleceniu:
echo "$ESC[46mColoured text"
Aby przywrócić oryginalne ustawienia kolorów, 0
zamiast tego używamy kodu :
echo "$ESC[46mColoured text$ESC[0mUncoloured text"
Jeśli nie jesteś zadowolony z podstawowej palety 16 kolorów, możesz użyć pełnych 24-bitowych kolorów za pomocą formularza:
"$ESC[48;2;<r>;<g>;<b>m"
Gdzie <r>
jest wartość dziesiętna dla czerwonego z 0-255, <g>
dla zielonego i <b>
niebieskiego, np"$ESC[48;2;255;0;123m"
Więcej informacji znajduje się w dokumentacji .
W rzeczywistości jest to bezpośrednio równoważne z tym, co zrobiłbyś w bash, z wyjątkiem tego, że musisz użyć $ESC
(po zdefiniowaniu) zamiast \e
lub \033
.
Zestawiając je razem, możemy użyć kodów ucieczki kolorów ANSI w zmodyfikowanym monicie, aby zmienić kolor tła:
function prompt
{
$ESC = [char]27
"$ESC[46mPS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) $ESC[0m"
}
Jeśli chcesz, aby trwało to między sesjami, dodaj go do swojego profilu (np .bashrc
.). Możesz wyświetlić ścieżkę do swojego profilu w $profile
.
1;37m
jest to to samo 97m
, co oznacza „jasna biel”)
[char]27
. Nie jestem pewien, czy zostało to dodane we wcześniejszych wersjach.