LINUX

Come personalizzare la variabile Shell PS1-PS4 su Bash Prompt

Puoi vedere la vera bellezza di Linux quando usi i comandi della shell. Per impostazione predefinita, il prompt della shell visualizza il nome host e la directory di lavoro. Usando le variabili, puoi cambiare il colore del prompt dei comandi, il display, la data, l’ora, il nome utente, ecc. Puoi persino eseguire script di shell all’interno della variabile PS1, dove PS rappresenta l’istruzione prompt. Mostrerò alcuni esempi di modifica dell’ambiente Linux utilizzando la variabile PS1.

Lettura correlata: Come cambiare il messaggio colorato di Bash Shell in Linux

Introduzione di diverse variabili di shell

  • PS1: variabile di ambiente contenente il valore del prompt predefinito. Modifica l’aspetto e l’ambiente del prompt dei comandi della shell.
  • PS2: variabile d’ambiente contenente il valore del prompt utilizzato per interpretare la continuazione del comando. Lo vedi quando scrivi un lungo comando su più righe.
  • PS3: variabile di ambiente che contiene il valore del prompt per l’operatore select all’interno dello script della shell.
  • PS4: variabile d’ambiente contenente il valore del prompt utilizzato per visualizzare le righe di script durante l’esecuzione di uno script bash in modalità debug.

Nota che in questo articolo useremo eco comando per vedere il valore del diverso prompt nella nostra console.

1) Cambia il prompt di bash PS1

PS1 è il prompt predefinito che vediamo ogni volta che accediamo alla console. Per i sistemi Linux più recenti, i valori predefiniti sono u@h:w$ che mostra nome utente, nome host, directory di lavoro corrente e privilegio utente. Questi sono solo esempi dei diversi valori che può assumere. Ci sono altri valori che vedremo in seguito. Diamo un’occhiata al valore predefinito del prompt PS1 sul terminale

# echo $PS1 
[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}u@h:w$

Le parti che includono debian_chroot indica che se stai lavorando in un ambiente di modifica root, il prompt verrà modificato per ricordartelo. Controlla di seguito per avere un’idea completa per il resto del prompt:
Opzioni:
a Carattere a campana ASCII (puoi anche digitare 07)
d Data nel formato “Sat Sep 04”.
e Carattere di escape ASCII (puoi anche digitare 33)
h La prima parte del nome host (come “mybox”)
H Nome host completo (come “mybox.mydomain.com”)
j Il numero di processi che hai sospeso in questa shell premendo ^Z
l Il nome del dispositivo terminale della shell (come “ttyp4”)
n Nuova linea
r Spedizione di ritorno
s Il nome dell’eseguibile della shell (come “bash”)
t Ora nel formato 24 ore (come “23:59:59”)
T Ora in formato 12 ore (come “11:59:59”)
@ Orario in formato 12 ore con am/pm
u Nome utente
v versione bash (come 2.04)
V Versione di Bash, compreso il livello di patch
w Directory di lavoro corrente (come “/home/koithara”)
W Il “nome di base” della directory di lavoro corrente (come “koithara”)
! La posizione corrente del comando nel buffer della cronologia
# Numero d’ordine (questo conterà fino a ogni richiesta fintanto che inserisci qualcosa)
$ Se non sei root, inserisci “$”; se sei root ottieni un “#”
xxx Inserisce un carattere ASCII basato su un numero di tre cifre xxx (sostituisci le cifre inutilizzate con zeri, ad esempio “07”)
\ Una barra rovesciata
[ This sequence should appear before a sequence of characters that don’t move the cursor (like color escape sequences). This allows bash to calculate word wrapping correctly.
] Questa sequenza dovrebbe apparire dopo una sequenza di caratteri non stampabili.

Faremo degli esempi, ma prima di manipolare il valore di queste variabili, dobbiamo salvare il file che le contiene tutte. Ci aiuterà a tornare più facilmente al nostro prompt originale se commettiamo un errore o senza dover disconnetterci e riconnetterci.

$ cp ~/.bashrc ~/.bashrc-backup

Esempio 1: Visualizza solo username e hostname con il separatore “-“:

user01@server01:~$ export PS1="u - h$ "
user01 - server01$ echo $PS1
u - h$

Possiamo immediatamente vedere il cambiamento sulla nostra console. Nota che dopo il segno di uguale, usiamo le virgolette doppie (“”) usare u e h i valori. Se usiamo un’altra annotazione, la shell considererà come valore tutto ciò che segue il segno di uguale e non avremo il risultato a cui stiamo assistendo.

Esempio 2: Simuliamo un errore durante la visualizzazione del nome utente e hostname perché useremo ^ invece di

user01@server01:~$ export PS1=^u - h$ ^
^u - h$ ^$ echo $PS1 
^u - h$ ^

Esempio 3: Passa la stringa alla variabile PS1

user01@sever01:~$ export PS1=happy-test$
happy-test$

Esempio 4: Aggiungi tempo per richiedere t e il direttore del lavoro con w

user01 - server01$ export PS1="[t] u@h:w$ "
[21:38:51] user01@server01:~$

Esempio 5: Dividi la richiesta in più righe con n per ordine lungo

user01@server01:~$ export PS1="[t]nu@h:w$ "
[21:44:46]
user01@server01:~$

2) Cambia il prompt di bash PS2

Quando siamo nella console, potremmo aver bisogno di combinare più comandi in un unico comando. Rende il comando troppo lungo per una singola riga, quindi può essere suddiviso in più righe dando “” alla fine di ogni riga. Interattivo per impostazione predefinita PS2 il valore richiesto per un comando su più righe è “>” che indica che puoi continuare il comando sulla seconda riga e così via.

$ echo $PS2
>

Esempio 1: Uso predefinito di PS2

# apt-get update && 
> apt-get -y install mysql-client python-setuptools curl git unzip apache2 php && 
> apt-get upgrade

Esempio 2: Sostituirai il valore con una frase. Notare l’escape prima dell’ultima citazione

# export PS2=”incomplete? continue here-> ”
# apt-get update && 
incomplete? continue here-> apt-get -y install curl git unzip apache2 && 
incomplete? continue here-> apt-get upgrade

3) Cambia il prompt di bash PS3

PS3 è usato da Selezionare operatore all’interno di uno script bash. È difficile ottenere il suo valore su una semplice console. Per mostrare di cosa stiamo parlando, dobbiamo scrivere un semplice script bash che ci aiuti a vedere il valore. Implicito PS3 il prompt del valore è “#?

Esempio 1: Copiamo il contenuto di seguito in un file chiamato ps3-value.sh

#!/bin/bash
echo "please select a value to display a month on the list below"
select i in jan feb mar apr exit
do
    case $i in
       jan) echo "January";;
       feb) echo "February";;
       mar) echo "March";;
       exit) exit;;
    esac
done

Esempio 2: Un test dello script per visualizzare il valore PS3

$ chmod +x ps3-value.sh
:~$./ps3-value.sh
1) jan
2) feb
3) mar
4) exit
#? 2
February
#?

Notare che “#?” è il valore PS3

Esempio 3: Modificare il valore predefinito in “scelta” e visualizzarlo eseguendo lo script

$ export PS3="choice: "
$./ps3-value.sh
Select a value to display a month on the below
1) jan
2) feb
3) mar
4) exit
choice: 2
February
choice:

guarda questo scelta è il nostro nuovo valore

4) Cambia il prompt bash di PS4

Il PS4 mostra ogni riga di uno script bash in modalità debug prima di eseguire le righe. Aiuta a sapere quale linea non dà il risultato partecipa. Possiamo visualizzare il valore PS4 con il comando echo. Ma in uno script bash, possiamo vederlo usando bash-x per l’esecuzione. Implicito PS4 il prompt del valore è “+

Esempio 1: Crea un file ps4-value.sh con lo stesso contenuto di ps3-value.sh e modifica il valore predefinito

$ echo $PS4
+
$ export PS4="[script line->:] "
$ chmod +x ps4-value.sh
$ bash -x ps4-value.sh 
[script line->: ]echo 'Please select a value to display a month on the list below'
Please select a value to display a month on the list below
[script line->: ]select i in jan feb mar apr bye
1) jan
2) feb
3) mar
4) apr
5) bye
#? 3
[script line->: ]case $i in
[script line->: ]echo March
March
#? 1
[script line->: ]case $i in
[script line->: ]echo January
January

Per rendere permanenti le modifiche

Per rendere PS1 persistente tra i riavvii, devi aggiungere il comando di esportazione variabile al tuo file .bash_profile.

$cat .bash_profile
export PS1="[d][t][u@h]"

Quindi caricare il file .bash_profile predefinito

$ . .bash_profile

Conclusione

Ora conosci il ruolo dei diversi prompt di bash e come modificarli. Prima di modificare, è importante salvare il file e devi essere in grado di ripristinarlo se si verifica un errore.

Related Articles

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Back to top button
Close