Bash
Dostosowywanie PS1
Szukaj…
Zmień monit PS1
Aby zmienić PS1, wystarczy zmienić wartość zmiennej powłoki PS1. Wartość można ustawić w pliku ~/.bashrc
lub /etc/bashrc
, w zależności od dystrybucji. PS1 można zmienić na dowolny zwykły tekst, taki jak:
PS1="hello "
Oprócz zwykłego tekstu obsługiwanych jest wiele znaków specjalnych, które nie są ukośnikami:
Format | Akcja |
---|---|
\a | znak dzwonka ASCII (07) |
\d | data w formacie „Dzień tygodnia Miesiąc Data” (np. „Wt 26 maja”) |
\D{format} | format jest przekazywany do strftime (3), a wynik jest wstawiany do ciągu zachęty; pusty format powoduje reprezentację czasu dla danego regionu. Szelki są wymagane |
\e | znak ucieczki ASCII (033) |
\h | nazwa hosta do pierwszego „.” |
\H | nazwa hosta |
\j | liczba zadań aktualnie zarządzanych przez powłokę |
\l | basename nazwy urządzenia końcowego powłoki |
\n | Nowa linia |
\r | powrót karetki |
\s | nazwa powłoki, basename 0 $ (część po ostatnim ukośniku) |
\t | aktualny czas w formacie 24-godzinnym GG: MM: SS |
\T | aktualny czas w formacie 12-godzinnym GG: MM: SS |
\@ | aktualny czas w formacie 12-godzinnym |
\A | aktualny czas w formacie 24-godzinnym GG: MM |
\u | nazwa użytkownika bieżącego użytkownika |
\v | wersja bash (np. 2.00) |
\V | wydanie bash, wersja + poziom łatki (np. 2.00.0) |
\w | bieżący katalog roboczy, z $ HOME w skrócie tyldą |
\W | basename bieżącego katalogu roboczego, z $ HOME w skrócie tyldą |
\! | numer historii tego polecenia |
\# | numer polecenia tego polecenia |
\$ | jeśli efektywny UID to 0, a #, w przeciwnym razie a $ |
\nnn* | znak odpowiadający liczbie ósemkowej nnn |
\ | ukośnik odwrotny |
\[ | rozpocząć sekwencję znaków niedrukowalnych, których można użyć do osadzenia terminala w linii poleceń |
\] | zakończ sekwencję znaków niedrukowalnych |
Na przykład możemy ustawić PS1 na:
PS1="\u@\h:\w\$ "
I wyświetli:
użytkownik @ maszyna: ~ $
Pokaż gałąź git za pomocą PROMPT_COMMAND
Jeśli znajdujesz się w folderze repozytorium git, fajnie byłoby pokazać bieżącą gałąź, w której się znajdujesz. W ~/.bashrc
lub /etc/bashrc
dodaj: (git jest wymagany, aby to działało):
function prompt_command {
# Check if we are inside a git repository
if git status > /dev/null 2>&1; then
# Only get the name of the branch
export GIT_STATUS=$(git status | grep 'On branch' | cut -b 10-)
else
export GIT_STATUS=""
fi
}
# This function gets called every time PS1 is shown
PROMPT_COMMAND=prompt_command
PS1="\$GIT_STATUS \u@\h:\w\$ "
Jeśli jesteśmy w folderze w repozytorium git, wyświetli się:
użytkownik oddziału @ maszyna: ~ $
A jeśli jesteśmy w normalnym folderze:
użytkownik @ maszyna: ~ $
Pokaż nazwę oddziału git w wierszu polecenia terminalu
Możesz mieć funkcje w zmiennej PS1, po prostu upewnij się, że ją zacytowałeś lub użyj escape dla specjalnych znaków:
gitPS1(){
gitps1=$(git branch 2>/dev/null | grep '*')
gitps1="${gitps1:+ (${gitps1/#\* /})}"
echo "$gitps1"
}
PS1='\u@\h:\w$(gitPS1)$ '
Daje ci to następujący monit:
user@Host:/path (master)$
Uwagi:
- Wprowadź zmiany w
/etc/bashrc
~/.bashrc
lub/etc/bashrc
lub~/.bash_profile
lub~./profile
(w zależności od systemu operacyjnego) i zapisz go. - Uruchom
source ~/.bashrc
(specyficzne dla dystrybucji) po zapisaniu pliku.
Pokaż czas w monicie terminala
timeNow(){
echo "$(date +%r)"
}
PS1='[$(timeNow)] \u@\h:\w$ '
Daje ci to następujący monit:
[05:34:37 PM] user@Host:/path$
Uwagi:
- Wprowadź zmiany w
/etc/bashrc
~/.bashrc
lub/etc/bashrc
lub~/.bash_profile
lub~./profile
(w zależności od systemu operacyjnego) i zapisz go. - Uruchom
source ~/.bashrc
(specyficzne dla dystrybucji) po zapisaniu pliku.
Koloruj i dostosuj monit terminala
Oto jak autor ustawia swoją osobistą zmienną PS1
:
gitPS1(){
gitps1=$(git branch 2>/dev/null | grep '*')
gitps1="${gitps1:+ (${gitps1/#\* /})}"
echo "$gitps1"
}
#Please use the below function if you are a mac user
gitPS1ForMac(){
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
timeNow(){
echo "$(date +%r)"
}
if [ "$color_prompt" = yes ]; then
if [ x$EUID = x0 ]; then
PS1='\[\033[1;38m\][$(timeNow)]\[\033[00m\] \[\033[1;31m\]\u\[\033[00m\]\[\033[1;37m\]@\[\033[00m\]\[\033[1;33m\]\h\[\033[00m\] \[\033[1;34m\]\w\[\033[00m\]\[\033[1;36m\]$(gitPS1)\[\033[00m\] \[\033[1;31m\]:/#\[\033[00m\] '
else
PS1='\[\033[1;38m\][$(timeNow)]\[\033[00m\] \[\033[1;32m\]\u\[\033[00m\]\[\033[1;37m\]@\[\033[00m\]\[\033[1;33m\]\h\[\033[00m\] \[\033[1;34m\]\w\[\033[00m\]\[\033[1;36m\]$(gitPS1)\[\033[00m\] \[\033[1;32m\]:/$\[\033[00m\] '
fi
else
PS1='[$(timeNow)] \u@\h \w$(gitPS1) :/$ '
fi
Kolor odniesienia:
# Colors
txtblk='\e[0;30m' # Black - Regular
txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple
txtcyn='\e[0;36m' # Cyan
txtwht='\e[0;37m' # White
bldblk='\e[1;30m' # Black - Bold
bldred='\e[1;31m' # Red
bldgrn='\e[1;32m' # Green
bldylw='\e[1;33m' # Yellow
bldblu='\e[1;34m' # Blue
bldpur='\e[1;35m' # Purple
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
unkblk='\e[4;30m' # Black - Underline
undred='\e[4;31m' # Red
undgrn='\e[4;32m' # Green
undylw='\e[4;33m' # Yellow
undblu='\e[4;34m' # Blue
undpur='\e[4;35m' # Purple
undcyn='\e[4;36m' # Cyan
undwht='\e[4;37m' # White
bakblk='\e[40m' # Black - Background
bakred='\e[41m' # Red
badgrn='\e[42m' # Green
bakylw='\e[43m' # Yellow
bakblu='\e[44m' # Blue
bakpur='\e[45m' # Purple
bakcyn='\e[46m' # Cyan
bakwht='\e[47m' # White
txtrst='\e[0m' # Text Reset
Uwagi:
Wprowadź zmiany w
/etc/bashrc
~/.bashrc
lub/etc/bashrc
lub~/.bash_profile
lub~./profile
(w zależności od systemu operacyjnego) i zapisz go.Dla
root
może trzeba także edytować/etc/bash.bashrc
lub/root/.bashrc
plikUruchom
source ~/.bashrc
(specyficzne dla dystrybucji) po zapisaniu pliku.Uwaga: jeśli zmiany zostały zapisane w
~/.bashrc
, pamiętaj, aby dodaćsource ~/.bashrc
do~/.bash_profile
, aby ta zmiana wPS1
była rejestrowana przy każdym uruchomieniu aplikacji Terminal.
Pokaż poprzedni status i czas powrotu polecenia
Czasami potrzebujemy podpowiedzi wizualnej, aby wskazać status powrotu poprzedniego polecenia. Poniższy fragment kodu umieścił go na czele PS1.
Zauważ, że funkcja __stat () powinna być wywoływana za każdym razem, gdy generowany jest nowy PS1, w przeciwnym razie trzymałby się statusu powrotu ostatniej komendy twojego .bashrc lub .bash_profile.
# -ANSI-COLOR-CODES- #
Color_Off="\033[0m"
###-Regular-###
Red="\033[0;31m"
Green="\033[0;32m"
Yellow="\033[0;33m"
####-Bold-####
function __stat() {
if [ $? -eq 0 ]; then
echo -en "$Green ✔ $Color_Off "
else
echo -en "$Red ✘ $Color_Off "
fi
}
PS1='$(__stat)'
PS1+="[\t] "
PS1+="\e[0;33m\u@\h\e[0m:\e[1;34m\w\e[0m \n$ "
export PS1