LINUX PROMPT

Linux Shell Prompt

Posted by gomyck on November 20, 2024

在 Linux 和 Unix 系统中,PS1、PS2、PS3 和 PS4 是 Prompt String 变量,用于控制终端中的提示符的样式和行为。它们是 Bash 中非常重要的环境变量,允许你定制命令行的显示方式。

各个 PS 变量的作用:

  • PS1:这是最常见的提示符变量,控制命令行的主提示符。
  • PS2:这是一个次级提示符,通常用于多行命令的情况(如命令被换行了)。
  • PS3:控制 select 命令的提示符,通常用于显示菜单时的提示符。
  • PS4:用于 set -x 调试模式下的提示符,通常用于显示脚本的执行步骤。
  • PS5:这是一个新的调试提示符,通常在启用 xtrace 时用于显示更加详细的脚本执行信息。

PS1 - 主提示符

PS1 是最常用的提示符,控制用户输入命令时的提示符。你可以将它设置为任何字符串,常见的配置包括显示用户名、主机名、当前路径等信息。

1
2
3
4
PS1="\u@\h:\w\$ "

# 这个设置会将提示符显示为:
username@hostname:/current/directory$

常用的转义字符:

1
2
3
4
\u:当前用户名
\h:主机名
\w:当前工作目录
\$:如果是超级用户,显示 #,否则显示 $

PS2 - 次级提示符

PS2 用于 PS1 提示符被换行时的提示符。例如,当你在命令行输入多行命令时,PS2 会作为接续行的提示符。

1
PS2="> "

PS3 - 菜单提示符

PS3 用于控制 select 命令的提示符,通常在交互式菜单中使用,用户通过输入数字选择菜单项。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
sel_val=""
PS3="Please select an option: "
options=('hub' 'local' 'exit')
select type in ${options[@]}
do
  case $type in
    'hub')
      sel_val="hub"
      break
      ;;
    'local')
      sel_val="local"
      break
      ;;
    'exit')
      echo "exit"
      exit 0
      break
      ;;
    *)
      echo "error"
      ;;
  esac
done

PS4 - 调试提示符

PS4 用于控制 set -x 调试模式下的提示符,通常在调试脚本时使用,显示脚本的执行步骤。

1
2
set -x
PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'

PS5 - 新的调试提示符

PS5 是一个新的调试提示符,通常在启用 xtrace 时用于显示更加详细的脚本执行信息。

1
2
set -x
PS5='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'