GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Shell:prendi il controllo di PS1, PS2, PS3, PS4 e PROMPT_COMMAND

La tua interazione con la shell Bash di Linux diventerà molto piacevole, se usi PS1, PS2, PS3, PS4 e PROMPT_COMMAND in modo efficace. PS sta per dichiarazione rapida. Questo articolo ti darà un inizio sulle variabili di ambiente del prompt dei comandi di Linux usando semplici esempi.

1. PS1 – Richiesta di interazione predefinita

Il prompt interattivo predefinito sul tuo Linux può essere modificato come mostrato di seguito in qualcosa di utile e informativo. Nell'esempio seguente, la PS1 predefinita era "\s-\v\$", che mostra il nome della shell e il numero di versione. Cambiamo questo comportamento predefinito per visualizzare il nome utente, il nome host e il nome della directory di lavoro corrente come mostrato di seguito.

-bash-3.2$  export PS1="\u@\h \w> "

ramesh@dev-db ~> cd /etc/mail
ramesh@dev-db /etc/mail>
[Note: Prompt changed to "username@hostname current-dir>" format] 

In questo esempio vengono utilizzati i seguenti codici PS1:

  • \u – Nome utente
  • \h – Nome host
  • \w – Percorso completo della directory corrente. Tieni presente che quando sei nella home directory, questo verrà visualizzato solo ~ come mostrato sopra
  • Nota che c'è uno spazio alla fine nel valore di PS1. Personalmente, preferisco uno spazio alla fine del prompt per una migliore leggibilità.

Rendi permanente questa impostazione aggiungendo export PS1=”\u@\h \w>” a .bash_profile (o) .bashrc come mostrato di seguito.

ramesh@dev-db ~> vi ~/.bash_profile (or)
ramesh@dev-db ~> vi ~/.bashrc
[Note: Add export PS1="\u@\h \w> " to one of the above files]

Nel prossimo post scriverò in dettaglio diversi esempi pratici di utilizzo di PS1.

2. PS2 – Prompt interattivo di continuazione

Un comando unix molto lungo può essere suddiviso in più righe dando \ alla fine della riga. Il prompt interattivo predefinito per un comando su più righe è “>”. Cambiamo questo comportamento predefinito per visualizzare "continua->" utilizzando la variabile di ambiente PS2 come mostrato di seguito.

ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \
> --key_buffer_size=512M --sort_buffer_size=512M \
> --read_buffer_size=4M --write_buffer_size=4M \
> /var/lib/mysql/bugs/*.MYI
[Note: This uses the default ">" for continuation prompt]

ramesh@dev-db ~> export PS2="continue-> "

ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \
continue-> --key_buffer_size=512M --sort_buffer_size=512M \
continue-> --read_buffer_size=4M --write_buffer_size=4M \
continue-> /var/lib/mysql/bugs/*.MYI
[Note: This uses the modified "continue-> " for continuation prompt]

L'ho trovato molto utile e facile da leggere, quando spezzo i miei lunghi comandi in più righe usando \. Ho anche visto altri a cui non piace spezzare i comandi lunghi. Qual è la tua preferenza? Ti piace suddividere i comandi lunghi in più righe?

3. PS3:prompt utilizzato da "select" all'interno dello script della shell

Puoi definire un prompt personalizzato per il ciclo di selezione all'interno di uno script di shell, utilizzando la variabile di ambiente PS3, come spiegato di seguito.

Script e output della shell SENZA PS3:

ramesh@dev-db ~> cat ps3.sh

select i in mon tue wed exit
do
  case $i in
    mon) echo "Monday";;
    tue) echo "Tuesday";;
    wed) echo "Wednesday";;
    exit) exit;;
  esac
done

ramesh@dev-db ~> ./ps3.sh

1) mon
2) tue
3) wed
4) exit
#? 1
Monday
#? 4
[Note: This displays the default "#?" for select command prompt]


Script e output della shell CON PS3:

ramesh@dev-db ~> cat ps3.sh

PS3="Select a day (1-4): "
select i in mon tue wed exit
do
  case $i in
    mon) echo "Monday";;
    tue) echo "Tuesday";;
    wed) echo "Wednesday";;
    exit) exit;;
  esac
done

ramesh@dev-db ~> ./ps3.sh
1) mon
2) tue
3) wed
4) exit
Select a day (1-4): 1
Monday
Select a day (1-4): 4
[Note: This displays the modified "Select a day (1-4): "
       for select command prompt]

4. PS4:utilizzato da "set -x" per prefissare l'output di traccia

La variabile della shell PS4 definisce il prompt che viene visualizzato quando esegui uno script della shell in modalità debug come mostrato di seguito.

Script e output della shell SENZA PS4:

ramesh@dev-db ~> cat ps4.sh

set -x
echo "PS4 demo script"
ls -l /etc/ | wc -l
du -sh ~

ramesh@dev-db ~> ./ps4.sh

++ echo 'PS4 demo script'
PS4 demo script
++ ls -l /etc/
++ wc -l
243
++ du -sh /home/ramesh
48K     /home/ramesh
[Note: This displays the default "++" while tracing the output using set -x]


Script e output della shell CON PS4:
La PS4 definita di seguito in ps4.sh ha i seguenti due codici:

  • $0 – indica il nome dello script
  • $LINENO:mostra il numero di riga corrente all'interno dello script
ramesh@dev-db ~> cat ps4.sh

export PS4='$0.$LINENO+ '
set -x
echo "PS4 demo script"
ls -l /etc/ | wc -l
du -sh ~

ramesh@dev-db ~> ./ps4.sh
../ps4.sh.3+ echo 'PS4 demo script'
PS4 demo script
../ps4.sh.4+ ls -l /etc/
../ps4.sh.4+ wc -l
243
../ps4.sh.5+ du -sh /home/ramesh
48K     /home/ramesh
[Note: This displays the modified "{script-name}.{line-number}+"
       while tracing the output using set -x]

5. PROMPT_COMMAND

La shell Bash esegue il contenuto di PROMPT_COMMAND appena prima di visualizzare la variabile PS1.

ramesh@dev-db ~> export PROMPT_COMMAND="date +%k:%m:%S"
22:08:42
ramesh@dev-db ~>
[Note: This displays the PROMPT_COMMAND and PS1 output on different lines]

Se vuoi visualizzare il valore di PROMPT_COMMAND nella stessa riga di PS1, usa echo -n come mostrato di seguito.

ramesh@dev-db ~> export PROMPT_COMMAND="echo -n [$(date +%k:%m:%S)]"
[22:08:51]ramesh@dev-db ~>
[Note: This displays the PROMPT_COMMAND and PS1 output on the same line]

Se ti è piaciuto questo articolo, aggiungilo ai preferiti su del.icio.us e Stumble utilizzando il collegamento fornito di seguito, nella sezione "Cosa succederà?".


Linux
  1. Differenza tra variabili Shell che vengono esportate e quelle che non sono in Bash?

  2. Lo scopo di .bashrc e come funziona?

  3. Bash Shell:prendi il controllo di PS1, PS2, PS3, PS4 e PROMPT_COMMAND

  4. Bash Shell Script:verifica la presenza di un flag e acquisisci il suo valore

  5. Ambito variabile per gli script e le funzioni della shell bash nello script

Bash-it - Bash Framework per controllare i tuoi script e alias

.bashrc vs .bash_profile

Bash Beginner Series n. 1:crea ed esegui il tuo primo script Bash Shell

Differenza tra virgolette singole e doppie in Bash Shell

Bash Scripting:come generare e formattare il testo su Linux Shell

Bash Shell PS1:10 esempi per rendere il tuo Linux Prompt come Angelina Jolie