如何在Bash提示符上自定义shell变量ps1-ps4
使用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的部分表示如果我们在更改根环境中运行,则将修改提示以提醒我们。看下面对其余提示有一个完整的想法:
选项:
\\a
ASCII铃声字符(您也可以键入\ 007)\d
日期为“ Sat Sep 04”格式\e
ASCII转义字符(您也可以键入\ 033)\h
主机名的第一部分(例如“ mybox”)\H
完整主机名(例如“ mybox.mydomain.com”)\j
您通过按^ Z在此shell中挂起的进程数\l
Shell终端设备的名称(例如“ ttyp4”)\n
换行符\r
回车\s
shell可执行文件的名称(例如“ bash”)\t
24小时制的时间(例如“ 23:59:59”)\T
时间以12小时格式(例如“ 11:59:59”)\@
时间为12小时制,上午/下午\u
您的用户名\v
bash的版本(例如2.04)\V
Bash版本,包括补丁级别\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