Bash Shell: Take Control of PS1, PS2, PS3, PS4 and PROMPT_COMMAND

來源:互聯網
上載者:User
文章目錄
  • 1. PS1 – Default interaction prompt
  • 2. PS2 – Continuation interactive prompt
  • 3. PS3 – Prompt used by “select” inside shell script
  • 4. PS4 – Used by “set -x” to prefix tracing output
  • 5. PROMPT_COMMAND

http://www.thegeekstuff.com/2008/09/bash-shell-take-control-of-ps1-ps2-ps3-ps4-and-prompt_command/

http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html

 

Your interaction with Linux Bash shell will become very pleasant, if you use PS1, PS2, PS3, PS4, and PROMPT_COMMAND effectively. PS stands for prompt statement. This article will give you a jumpstart on the Linux command prompt environment variables using simple examples.

1. PS1 – Default interaction prompt

The default interactive prompt on your Linux can be modified as shown below to something useful and informative. In the following example, the default PS1 was “\s-\v\$”, which displays the shell name and the version number. Let us change this default behavior to display the username, hostname and current working directory name as shown below.

-bash-3.2$  export PS1="\u@\h \w> "ramesh@dev-db ~> cd /etc/mailramesh@dev-db /etc/mail>[Note: Prompt changed to "username@hostname current-dir>" format] 

Following PS1 codes are used in this example:

  • \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. Personally, I prefer a space at the end of the prompt for better readability.

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

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]

In the next post, I’ll write about several practical examples of PS1 usage in detail.

2. PS2 – Continuation interactive prompt

A very long unix command can be broken down to multiple line 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 ~> 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]

I found it very helpful and easy to read, when I break my long commands into multiple lines using \. I have also seen others who don’t like to break-up long commands. What is your preference? Do you like breaking up long commands into multiple lines?

3. PS3 – Prompt used by “select” inside shell script

You can define a custom prompt for the select loop inside a shell script, using the PS3 environment variable, as explained below.

Shell script and output WITHOUT PS3:

ramesh@dev-db ~> cat ps3.shselect i in mon tue wed exitdo  case $i in    mon) echo "Monday";;    tue) echo "Tuesday";;    wed) echo "Wednesday";;    exit) exit;;  esacdoneramesh@dev-db ~> ./ps3.sh1) mon2) tue3) wed4) exit#? 1Monday#? 4[Note: This displays the default "#?" for select command prompt]


Shell script and output WITH PS3:

ramesh@dev-db ~> cat ps3.shPS3="Select a day (1-4): "select i in mon tue wed exitdo  case $i in    mon) echo "Monday";;    tue) echo "Tuesday";;    wed) echo "Wednesday";;    exit) exit;;  esacdoneramesh@dev-db ~> ./ps3.sh1) mon2) tue3) wed4) exitSelect a day (1-4): 1MondaySelect a day (1-4): 4[Note: This displays the modified "Select a day (1-4): "       for select command prompt]
4. 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:

ramesh@dev-db ~> cat ps4.shset -xecho "PS4 demo script"ls -l /etc/ | wc -ldu -sh ~ramesh@dev-db ~> ./ps4.sh++ echo 'PS4 demo script'PS4 demo script++ ls -l /etc/++ wc -l243++ du -sh /home/ramesh48K     /home/ramesh[Note: This displays the default "++" while tracing the output using set -x]


Shell script and output WITH PS4:
The PS4 defined below in the ps4.sh has the following two codes:

  • $0 – indicates the name of script
  • $LINENO – displays the current line number within the script
ramesh@dev-db ~> cat ps4.shexport PS4='$0.$LINENO+ 'set -xecho "PS4 demo script"ls -l /etc/ | wc -ldu -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 -l243../ps4.sh.5+ du -sh /home/ramesh48K     /home/ramesh[Note: This displays the modified "{script-name}.{line-number}+"       while tracing the output using set -x]
5. PROMPT_COMMAND

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

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

If you want to display the value of PROMPT_COMMAND in the same line as the PS1, use the echo -n as shown below.

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]
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.