如何在Bash提示符上自定义shell变量ps1-ps4

时间:2020-03-05 15:26:03  来源:igfitidea点击:

使用shell命令时,我们可以看到Linux的真实美。
有一些任务我们无法在GUI中做,并且必须使用shell。
所以在shell 命令中具有知识,它将让我们保持领先于其他人。
默认情况下,shell提示显示主机名和工作目录。
使用变量可以更改命令提示符颜色,显示,日期时间,用户名等。
我们甚至可以在PS1变量中运行shell脚本,其中ps代表提示语句。
我将展示使用变量PS1更改Linux环境的一些示例。

呈现不同的shell变量

  • ps1:环境变量包含默认提示的值。它更改shell命令提示符外观和环境。
  • PS2:环境变量包含用于命令延续解释的提示的值。当我们在许多行中编写一个长命令时,我们会看到它。
  • PS3:环境变量包含shell脚本中选择运算符的提示值。
  • PS4:环境变量包含用于在调试模式下执行Bash脚本期间显示脚本行的提示符的值。

请注意,在本文中,我们将使用Echo命令查看我们控制台中不同提示的值。

1)更改BASH提示PS1

PS1是我们在登录控制台时每次看到的默认提示。对于最新闻的Linux系统,默认值具有_@ \ h:\w \ w \ $,它显示用户名,主机名,当前工作目录和用户权限。这些只是它可以采取的不同值的示例。我们稍后会看到一些其他值。让我们来看看终端上的PS1提示默认值

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

包括Debian_Chroot的部分表示如果我们在更改根环境中运行,则将修改提示以提醒我们。看下面对其余提示有一个完整的想法:

选项:

\\aASCII铃声字符(您也可以键入\ 007)
\d日期为“ Sat Sep 04”格式
\eASCII转义字符(您也可以键入\ 033)
\h主机名的第一部分(例如“ mybox”)
\H完整主机名(例如“ mybox.mydomain.com”)
\j您通过按^ Z在此shell中挂起的进程数
\lShell终端设备的名称(例如“ ttyp4”)
\n换行符
\r回车
\sshell可执行文件的名称(例如“ bash”)
\t24小时制的时间(例如“ 23:59:59”)
\T时间以12小时格式(例如“ 11:59:59”)
\@时间为12小时制,上午/下午
\u您的用户名
\vbash的版本(例如2.04)
\VBash版本,包括补丁级别
\w当前工作目录(例如“ / home / koithara”)
\W当前工作目录的“基本名称”(例如“ koithara”)
\\!当前命令在历史记录缓冲区中的位置
\\#命令号(只要您键入内容,它就会在每次提示时计数)
\$如果您不是root用户,则插入“ $”;如果您是root用户,则会得到一个“#”
\xxx插入一个基于三位数xxx的ASCII字符(将未使用的数字替换为零,例如“ \ 007”)
\\反斜杠
\[此序列应出现在不移动光标的字符序列之前(例如颜色转义序列)。这使bash可以正确计算自动换行。
\\]这个序列应该出现在一系列非打印字符之后。

我们将执行一些示例,但在操纵这些变量的值之前,我们需要保存包含全部的文件。如果我们犯错误或者不必再注销并再次退回,它将有助于更容易地转回我们的原始提示。

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

示例1:仅显示具有分隔字符的用户名和主机名" - ":

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

我们可以立即看到我们控制台的更改。请注意,在等于标志之后,我们使用双重报价("")来使用\ u和\ h值。如果我们使用另一个注释,Shell将在等于值的平等标志之后考虑所有符号,我们将没有结果我们参加.example 2:我们在显示用户名和主机名时模拟错误,因为我们将使用^而不是"

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

示例3:将字符串传递给PS1变量

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

示例4:使用\ w向提示添加时间和工作目录

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

示例5:使用\ n为long命令将提示分成多行

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

2)更改BASH提示PS2

当我们在控制台时,我们可能需要在一个命令中关联许多命令。
它使命令太长,一行,因此可以通过在每行的末尾给出""来分解为多行。
多行命令的默认交互式PS2值提示是">",表示我们可以在第二行继续下行命令等。

$echo $PS2
>

示例1:PS2的默认使用情况

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

示例2:我们将通过句子替换该值。
注意最后一次报价前的逃生

# 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)更改BASH提示PS3

PS3由Bash脚本内的选择运算符使用。
很难在简单的控制台上有其值。
要展示我们在谈论的内容,我们需要编写一个简单的Bash脚本,这将有助于我们查看该值。
默认PS3值提示是"#?
"

示例1:我们将在名为ps3-value.sh的文件上复制下面的内容

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

示例2:脚本的测试以显示PS3的值

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

注意 "#?
"是ps3值

示例3:将默认值修改为"选择"并通过执行脚本显示它

$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:

看到选择是我们的新价值

4)更改BASH提示PS4

PS4显示在执行行之前在调试模式下的每行Bash脚本。
它有助于知道哪条线不会给出结果。
我们可以使用Echo命令显示PS4的值。
但是在Bash脚本中,我们可以使用Bash -X看到它的执行。
默认PS4值提示是"+"

示例1:使用ps3-value.sh的TE相同内容创建文件ps4-value.sh并修改默认值

$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 Nov 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

使改变永久变动

要使PS1持久在重新启动时,必须将具有变量的导出命令添加到.bash_profile文件。

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

然后加载默认值.bash_profile文件

$. .bash_profile