GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash Shell:Übernimm die Kontrolle über PS1, PS2, PS3, PS4 und PROMPT_COMMAND

Ihre Interaktion mit der Linux-Bash-Shell wird sehr angenehm, wenn Sie PS1, PS2, PS3, PS4 und verwenden PROMPT_COMMAND effektiv. PS steht für Prompt Statement. Dieser Artikel gibt Ihnen anhand einfacher Beispiele einen schnellen Einstieg in die Umgebungsvariablen der Linux-Eingabeaufforderung.

1. PS1 – Standardinteraktionsaufforderung

Die standardmäßige interaktive Eingabeaufforderung auf Ihrem Linux kann wie unten gezeigt in etwas Nützliches und Informatives geändert werden. Im folgenden Beispiel war die Standard-PS1 „\s-\v\$“, die den Shell-Namen und die Versionsnummer anzeigt. Lassen Sie uns dieses Standardverhalten ändern, um den Benutzernamen, den Hostnamen und den Namen des aktuellen Arbeitsverzeichnisses wie unten gezeigt anzuzeigen.

-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 diesem Beispiel werden die folgenden PS1-Codes verwendet:

  • \u – Benutzername
  • \h – Hostname
  • \w – Vollständiger Pfadname des aktuellen Verzeichnisses. Bitte beachten Sie, dass, wenn Sie sich im Home-Verzeichnis befinden, nur ~ angezeigt wird, wie oben gezeigt
  • Beachten Sie, dass am Ende des Werts von PS1 ein Leerzeichen steht. Ich persönlich bevorzuge ein Leerzeichen am Ende der Eingabeaufforderung für eine bessere Lesbarkeit.

Machen Sie diese Einstellung dauerhaft, indem Sie export PS1=”\u@\h \w> ” entweder zu .bash_profile (oder) .bashrc hinzufügen, wie unten gezeigt.

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]

Im nächsten Beitrag werde ich ausführlich über einige praktische Beispiele der PS1-Nutzung schreiben.

2. PS2 – Fortsetzung der interaktiven Eingabeaufforderung

Ein sehr langer Unix-Befehl kann auf mehrere Zeilen heruntergebrochen werden, indem \ am Ende der Zeile angegeben wird. Die standardmäßige interaktive Eingabeaufforderung für einen mehrzeiligen Befehl ist „> “. Lassen Sie uns dieses Standardverhalten so ändern, dass „Continue->“ angezeigt wird, indem wir die PS2-Umgebungsvariable wie unten gezeigt verwenden.

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]

Ich fand es sehr hilfreich und leicht zu lesen, wenn ich meine langen Befehle mit \ in mehrere Zeilen unterteile. Ich habe auch andere gesehen, die lange Befehle nicht gerne aufteilen. Was bevorzugst du? Teilen Sie lange Befehle gerne in mehrere Zeilen auf?

3. PS3 – Eingabeaufforderung, die von „select“ innerhalb des Shell-Skripts verwendet wird

Sie können eine benutzerdefinierte Eingabeaufforderung für die Auswahlschleife innerhalb eines Shell-Skripts definieren, indem Sie die PS3-Umgebungsvariable verwenden, wie unten erläutert.

Shell-Skript und Ausgabe OHNE 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]


Shell-Skript und Ausgabe MIT 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 – Wird von „set -x“ verwendet, um der Ablaufverfolgungsausgabe ein Präfix voranzustellen

Die PS4-Shell-Variable definiert die Eingabeaufforderung, die angezeigt wird, wenn Sie ein Shell-Skript wie unten gezeigt im Debug-Modus ausführen.

Shell-Skript und Ausgabe OHNE 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]


Shell-Skript und Ausgabe MIT PS4:
Die unten in der ps4.sh definierte PS4 hat die folgenden zwei Codes:

  • $0 – gibt den Namen des Skripts an
  • $LINENO – zeigt die aktuelle Zeilennummer innerhalb des Skripts an
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

Die Bash-Shell führt den Inhalt von PROMPT_COMMAND aus, kurz bevor die PS1-Variable angezeigt wird.

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]

Wenn Sie den Wert von PROMPT_COMMAND in derselben Zeile wie PS1 anzeigen möchten, verwenden Sie echo -n wie unten gezeigt.

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]

Wenn Ihnen dieser Artikel gefallen hat, markieren Sie ihn bitte auf del.icio.us und Stumble Verwenden Sie den unten angegebenen Link im Abschnitt „Was kommt als Nächstes?“.


Linux
  1. Programmieren mit Bash:Syntax und Tools

  2. Navigieren in der Bash-Shell mit pushd und popd

  3. Anpassen der Bash-Shell

  4. Der Zweck von .bashrc und wie funktioniert es?

  5. Variablenbereich für Bash-Shell-Skripte und Funktionen im Skript

Bash-it – Bash-Framework zur Kontrolle Ihrer Skripte und Aliase

.bashrc vs. .bash_profile

Bash-Anfängerserie Nr. 1:Erstellen Sie Ihr erstes Bash-Shell-Skript und führen Sie es aus

Unterschied zwischen einfachen und doppelten Anführungszeichen in Bash Shell

Bash-Skripting:So geben Sie Text in der Linux-Shell aus und formatieren ihn

Bash Shell PS1:10 Beispiele, um Ihr Linux wie Angelina Jolie zu machen