Chapter 5: PS1, PS2, PS3, PS4 andPROMPT_COMMAND

        __Linux 101 Hacks

Hack 29. PS1 - Default Interaction Prompt

 

-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]

 

    \u – Username

 

    \h – Hostname

    \w - Full pathname of current directory. Please note that when you are in the home directory, this will display only ~ as shown above.

Note that there is a space at the end in the value of PS1.

Make this setting permanent by adding export PS1=”\u@\h \w> ” to either .bash_profile (or) .bashrc.

 

Hack 30. PS2 - Continuation Interactive Prompt

A very long command can be broken down to multiple lines by giving \ at the end of the line. The default interactive prompt for a multi-line command is “> “. 

Let us change this default behavior to display “continue->” by using PS2 environment variable as shown below.

 

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

 

 

 

Hack 31. PS3 - Prompt used by “select” inside shell script

    Shell script and output WITHOUT PS3:   

1 select i in mon tue wed exit
2 do
3 case $i in
4 mon) echo "Monday";;
5 tue) echo "Tuesday";;
6 wed) echo "Wednesday";;
7 exit) exit;;
8 esac
9 done
10  

 

 

    Shell script and output WITH PS3:

 

代码
1 PS3="Select a day (1-4): "
2 select i in mon tue wed exit
3 do
4 case $i in
5 mon) echo "Monday";;
6 tue) echo "Tuesday";;
7 wed) echo "Wednesday";;
8 exit) exit;;
9 esac
10 done
11  

 

Hack 32. PS4 - Used by “set -x” to prefix tracing output

The PS4 shell variable defines the prompt that gets displayed, when you execute a shell script in debug mode as shown below.

    Shell script and output WITHOUT PS4:

代码
1 ramesh@dev-db ~> cat ps4.sh
2 set -x
3 echo "PS4 demo script"
4 ls -l /etc/ | wc -l
5 du -sh ~
6
7 ramesh@dev-db ~> ./ps4.sh
8  ++ echo 'PS4 demo script'
9 PS4 demo script
10  ++ ls -l /etc/
11  ++ wc -l
12  243
13  ++ du -sh /home/ramesh
14 48K /home/ramesh
15  

 

[Note: This displays the default "++" while tracing the output using set -x]

    Shell script and output WITH PS4:

代码
1 ramesh@dev-db ~> cat ps4.sh
2 export PS4='$0.$LINENO+ '
3 set -x
4 echo "PS4 demo script"
5 ls -l /etc/ | wc -l
6 du -sh ~
7
8 ramesh@dev-db ~> ./ps4.sh
9 ../ps4.sh.3+ echo 'PS4 demo script'
10 PS4 demo script
11 ../ps4.sh.4+ ls -l /etc/
12 ../ps4.sh.4+ wc -l
13  243
14 ../ps4.sh.5+ du -sh /home/ramesh
15 48K /home/ramesh
16  

 

[Note: This displays the modified "{script-name}.{line-number}+" while tracing the output using set -x]

 

 

Hack 33. PROMPT_COMMAND

Bash shell executes the content of the PROMPT_COMMAND just before displaying the PS1 variable.

ramesh@dev-db ~> export PROMPT_COMMAND="date +%H:%M:%S"
22:08:42

ramesh@dev
-db ~> export PROMPT_COMMAND="echo -n [$(date +%H:%M:%S)]"
[
22:08:51]

 

 

posted on 2010-10-04 22:27  oyzway  阅读(795)  评论(0编辑  收藏  举报