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....    


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow