Bash
Omgaan met de systeemprompt
Zoeken…
Syntaxis
- export PS1 = "iets" # wordt weergegeven wanneer bash wacht op een opdracht om te worden ingetypt
- export PS2 = "anotherthing" # dwordt weergegeven wanneer de instructie zich uitstrekt tot meer regels
- export PS3 = "vraagprompt voor select statement" # zelden gebruikt prompt voor select. Stel eerst PS3 in volgens uw behoeften en bel vervolgens select . Zie help selecteren
- export PS4 = "meestal handig voor foutopsporing; regelnummer enzovoort" # gebruikt voor het debuggen van bash-scripts.
parameters
Ontsnappen | Details |
---|---|
\een | Een belkarakter. |
\ d | De datum in de indeling "Weekdag Maand Datum" (bijvoorbeeld "di 26 mei"). |
\ {D} FORMAT | De FORMAT wordt doorgegeven aan `strftime '(3) en het resultaat wordt ingevoegd in de promptstring; een lege FORMAT resulteert in een locale-specifieke tijdsrepresentatie. De beugels zijn verplicht. |
\ e | Een ontsnappingskarakter. \ 033 werkt natuurlijk ook. |
\ h | De hostnaam, tot de eerste `. '. (dwz geen domeindeel) |
\ H | De hostnaam uiteindelijk met domeindeel |
\ j | Het aantal taken dat momenteel door de shell wordt beheerd. |
\ l | De basenaam van de naam van het eindapparaat van de shell. |
\ n | Een nieuwe regel. |
\ r | Een koets terug. |
\ s | De naam van de shell, de basenaam van `$ 0 '(het gedeelte na de laatste schuine streep). |
\ t | De tijd, in 24-uurs indeling HH: MM: SS. |
\ T | De tijd, in 12-uurs HH: MM: SS-formaat. |
@ | De tijd, in 12-uurs notatie am / pm. |
\EEN | De tijd, in 24-uurs HH: MM-formaat. |
\ u | De gebruikersnaam van de huidige gebruiker. |
\ v | De versie van Bash (bijvoorbeeld 2.00) |
\ V | De release van Bash, versie + patchlevel (bijv. 2.00.0) |
\ w | De huidige werkmap, met $ HOME afgekort met een tilde (gebruikt de variabele $ PROMPT_DIRTRIM). |
\ w | De basisnaam van $ PWD, met $ HOME afgekort met een tilde. |
! | Het geschiedenisnummer van deze opdracht. |
# | Het opdrachtnummer van deze opdracht. |
$ | Als de effectieve uid 0, # is , anders $ . |
\ NNN | Het teken waarvan de ASCII-code de octale waarde NNN is. |
\ | Een backslash. |
\ [ | Begin een reeks niet-afdrukbare tekens. Dit kan worden gebruikt om een terminalcontrolesequentie in de prompt in te sluiten. |
\] | Een reeks niet-afdrukbare tekens beëindigen. |
De variabele PROMPT_COMMAND envrionment gebruiken
Wanneer de laatste opdracht in een interactieve bash-instantie is voltooid, wordt de geëvalueerde PS1-variabele weergegeven. Voordat PS3 daadwerkelijk wordt weergegeven, kijkt bash of de PROMPT_COMMAND is ingesteld. Deze waarde van deze var moet een opvraagbaar programma of script zijn. Als deze var is ingesteld, wordt dit programma / script genoemd VOORDAT de PS1-prompt wordt weergegeven.
# 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
PS2 gebruiken
PS2 wordt weergegeven wanneer een opdracht zich uitstrekt tot meer dan één regel en bash op meer toetsaanslagen wacht. Het wordt ook weergegeven wanneer een samengestelde opdracht zoals while ... do..done en gelijk wordt ingevoerd.
export PS2="would you please complete this command?\n"
# now enter a command extending to at least two lines to see PS2
PS3 gebruiken
Wanneer de select-opdracht wordt uitgevoerd, toont het de gegeven items voorafgegaan door een nummer en vervolgens de PS3-prompt:
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
PS4 gebruiken
PS4 wordt weergegeven wanneer bash in de foutopsporingsmodus staat.
#!/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' )
PS1 gebruiken
PS1 is de normale systeemprompt die aangeeft dat bash wacht op ingevoerde commando's. Het begrijpt enkele escape-reeksen en kan functies of programma's uitvoeren. Omdat bash de cursor achter de weergegeven prompt moet plaatsen, moet het weten hoe de effectieve lengte van de promptstring moet worden berekend. Om aan te geven dat niet-opeenvolgende tekens van tekens binnen de PS1 variabele ontsnapte accolades worden gebruikt: \ [ een niet-afdrukken opeenvolging van tekens \] . Alles gezegd geldt voor alle PS * -vars.
(Het zwarte kruisje geeft de cursor aan)
#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....