Bash
Gestione del prompt di sistema
Ricerca…
Sintassi
- export PS1 = "something" # viene visualizzato quando bash attende un comando da digitare
- export PS2 = "anotherthing" # dsplayed quando l'istruzione si estende su più righe
- esportazione PS3 = "domanda prompt per istruzione scelta" # prompt usato raramente per selezionare. Per prima cosa imposta PS3 in base alle tue esigenze, quindi chiama select . Vedi aiuto per selezionare
- export PS4 = "principalmente utile per il debug, numero di riga e così via" # usato per il debug degli script di bash.
Parametri
Fuga | Dettagli |
---|---|
\un | Un personaggio campana. |
\ d | La data, nel formato "Data del giorno della settimana" (es. "Mar 26 maggio"). |
\ D {FORMAT} | Il FORMATO viene passato a `strftime '(3) e il risultato viene inserito nella stringa di richiesta; un FORMATO vuoto produce una rappresentazione temporale specifica della locale. Le parentesi sono obbligatorie. |
\ e | Un personaggio di fuga. \ 033 ovviamente anche i lavori. |
\ h | Il nome host, fino al primo `. '. (cioè nessuna parte del dominio) |
\ H | Il nome host alla fine con la parte del dominio |
\ j | Il numero di lavori attualmente gestiti dalla shell. |
\ l | Il nome di base del nome del dispositivo terminale della shell. |
\ n | Una nuova riga. |
\ r | Un ritorno a capo. |
\S | Il nome della shell, il nome di base di $ 0 (la parte che segue la barra finale). |
\ t | L'ora, nel formato HH: MM: SS di 24 ore. |
\ T | L'ora, nel formato HH: MM: SS di 12 ore. |
@ | L'ora, nel formato am / pm delle 12 ore. |
\UN | L'ora, nel formato HH: MM di 24 ore. |
\ u | Il nome utente dell'utente corrente. |
\ v | La versione di Bash (ad esempio, 2,00) |
\ V | Il rilascio di Bash, versione + patchlevel (es. 2.00.0) |
\ w | La directory di lavoro corrente, con $ HOME abbreviato con una tilde (utilizza la variabile $ PROMPT_DIRTRIM). |
\ W | Il nome base di $ PWD, con $ HOME abbreviato con una tilde. |
! | Il numero di cronologia di questo comando. |
# | Il numero di comando di questo comando. |
$ | Se l'uid effettivo è 0, # , altrimenti $ . |
\ NNN | Il personaggio il cui codice ASCII è il valore ottale NNN. |
\ | Un backslash. |
\ [ | Inizia una sequenza di caratteri non stampabili. Questo potrebbe essere usato per incorporare una sequenza di controllo terminale nel prompt. |
\] | Termina una sequenza di caratteri non stampabili. |
Utilizzo della variabile envrionment PROMPT_COMMAND
Quando viene eseguito l'ultimo comando in un'istanza di bash interattiva, viene visualizzata la variabile PS1 valutata. Prima di visualizzare effettivamente la bash PS1, viene visualizzato se è impostato PROMPT_COMMAND. Questo valore di questa var deve essere un programma o uno script richiamabile. Se questa var è impostata, questo programma / script viene chiamato PRIMA viene visualizzato il prompt 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
Utilizzando PS2
PS2 viene visualizzato quando un comando si estende a più di una riga e bash attende ulteriori sequenze di tasti. Viene visualizzato anche quando un comando composto come while ... do..done e allo stesso modo viene inserito.
export PS2="would you please complete this command?\n"
# now enter a command extending to at least two lines to see PS2
Utilizzando PS3
Quando viene eseguita l'istruzione select, visualizza gli elementi forniti preceduti da un numero e quindi visualizza il prompt di 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
Utilizzando PS4
PS4 viene visualizzato quando bash si trova in modalità di debug.
#!/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' )
Utilizzando PS1
PS1 è il normale prompt di sistema che indica che bash attende i comandi digitati. Comprende alcune sequenze di escape e può eseguire funzioni o programmi. Poiché bash deve posizionare il cursore dopo il prompt dei display, deve sapere come calcolare la lunghezza effettiva della stringa di prompt. Per indicare sequenze non stampabili di caratteri all'interno della variabile PS1, vengono utilizzate le parentesi di escape: \ [ una sequenza di caratteri non stampabile \] . Tutto ciò che viene detto è vero per tutti i vars di PS *.
(Il cursore nero indica il cursore)
#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....