Bash
Obsługa monitu systemowego
Szukaj…
Składnia
- eksport PS1 = „coś” # wyświetla się, gdy bash czeka na polecenie do wpisania
- export PS2 = "anotherthing" # dsplayed, gdy instrukcja rozszerza się na więcej wierszy
- export PS3 = "pytanie o instrukcję select" # rzadko używane pytanie o select. Najpierw dostosuj PS3 do swoich potrzeb, a następnie wybierz połączenie. Zobacz pomoc dotyczącą wyboru
- export PS4 = "głównie przydatne do debugowania; numer linii i tak dalej" # używane do debugowania skryptów bash.
Parametry
Ucieczka | Detale |
---|---|
\za | Dzwonkowa postać. |
\re | 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. |
\mi | Postać ucieczki. \ 033 oczywiście działa. |
\ h | Nazwa hosta, do pierwszego `. '. (tzn. brak części domeny) |
\ H | Nazwa hosta ostatecznie z częścią domeny |
\jot | 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, nazwa basenowa `$ 0 '(część następująca po ostatnim ukośniku). |
\ t | Czas w formacie 24-godzinnym GG: MM: SS. |
\ T | Czas w formacie 12-godzinnym GG: MM: SS. |
@ | Godzina w formacie 12-godzinnym. |
\ZA | 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 poprawek (np. 2.00.0) |
\ w | Bieżący katalog roboczy, z $ HOME w skrócie tyldą (używa zmiennej $ PROMPT_DIRTRIM). |
\ W | Basename $ PWD, z $ HOME w skrócie tyldą. |
! | Numer historii tego polecenia. |
# | Numer polecenia tego polecenia. |
$ | Jeśli efektywny identyfikator to 0, # , w przeciwnym razie $ . |
\ NNN | Znak, którego kod ASCII jest wartością ósemkową NNN. |
\ | Odwrotny ukośnik. |
\ [ | Rozpocznij sekwencję znaków niedrukowalnych. Można to wykorzystać do osadzenia terminala w sekwencji poleceń. |
\] | Zakończ sekwencję znaków niedrukowalnych. |
Korzystanie ze zmiennej środowiska PROMPT_COMMAND
Po wykonaniu ostatniego polecenia w interaktywnej instancji bash wyświetlana jest oszacowana zmienna PS1. Przed rzeczywistym wyświetleniem bash PS1 sprawdza, czy ustawiony jest PROMPT_COMMAND. Ta wartość tego var musi być wywoływalnym programem lub skryptem. Jeśli ten var jest ustawiony, ten program / skrypt jest nazywany PRZED wyświetleniem monitu PS1.
# just a stupid function, we will use to demonstrate
# we check the date if Hour is 12 and Minute is lower than 59
lunchbreak(){
if (( $(date +%H) == 12 && $(date +%M) < 59 )); then
# and print colored \033[ starts the escape sequence
# 5; is blinking attribute
# 2; means bold
# 31 says red
printf "\033[5;1;31mmind the lunch break\033[0m\n";
else
printf "\033[33mstill working...\033[0m\n";
fi;
}
# activating it
export PROMPT_COMMAND=lunchbreak
Korzystanie z PS2
PS2 jest wyświetlane, gdy polecenie rozciąga się na więcej niż jedną linię, a bash czeka na więcej naciśnięć klawiszy. Jest również wyświetlany, gdy wprowadzono polecenie złożone, takie jak while ... do..done and podobne.
export PS2="would you please complete this command?\n"
# now enter a command extending to at least two lines to see PS2
Korzystanie z PS3
Po wykonaniu instrukcji select wyświetla dane elementy poprzedzone liczbą, a następnie wyświetla monit PS3:
export PS3=" To choose your language type the preceding number : "
select lang in EN CA FR DE; do
# check input here until valid.
break
done
Korzystanie z PS4
PS4 wyświetla się, gdy bash jest w trybie debugowania.
#!/usr/bin/env bash
# switch on debugging
set -x
# define a stupid_func
stupid_func(){
echo I am line 1 of stupid_func
echo I am line 2 of stupid_func
}
# setting the PS4 "DEBUG" prompt
export PS4='\nDEBUG level:$SHLVL subshell-level: $BASH_SUBSHELL \nsource-file:${BASH_SOURCE} line#:${LINENO} function:${FUNCNAME[0]:+${FUNCNAME[0]}(): }\nstatement: '
# a normal statement
echo something
# function call
stupid_func
# a pipeline of commands running in a subshell
( ls -l | grep 'x' )
Korzystanie z PS1
PS1 jest normalnym monitem systemowym wskazującym, że bash czeka na wpisanie poleceń. Rozumie niektóre sekwencje specjalne i może wykonywać funkcje lub programy. Ponieważ bash musi ustawić kursor po monicie displayes, musi wiedzieć, jak obliczyć efektywną długość ciągu monitu. Aby wskazać, że sekwencje znaków nie są drukowane w zmiennej PS1, zastosowano nawiasy klamrowe: \ [ sekwencja znaków, która nie drukuje \] . Wszystko, co powiedziane, dotyczy wszystkich odmian PS *.
(Czarny kursor wskazuje kursor)
#everything not being an escape sequence will be literally printed
export PS1="literal sequence " # Prompt is now:
literal sequence ▉
# \u == user \h == host \w == actual working directory
# mind the single quotes avoiding interpretation by shell
export PS1='\u@\h:\w > ' # \u == user, \h == host, \w actual working dir
looser@host:/some/path > ▉
# executing some commands within PS1
# following line will set foreground color to red, if user==root,
# else it resets attributes to default
# $( (($EUID == 0)) && tput setaf 1)
# later we do reset attributes to default with
# $( tput sgr0 )
# assuming being root:
PS1="\[$( (($EUID == 0)) && tput setaf 1 \]\u\[$(tput sgr0)\]@\w:\w \$ "
looser@host:/some/path > ▉ # if not root else <red>root<default>@host....