美文网首页Linux_System
Linux理念,提示符:PS1、PS2、PS3、PS4

Linux理念,提示符:PS1、PS2、PS3、PS4

作者: c80bc26f12ed | 来源:发表于2017-09-17 14:53 被阅读89次

    Linux设计理念

    1.一切皆文件:是 Unix/Linux 的基本理念之一。
    2.单一用途的程序组成,保证linux内核的高效运行。
    3.联接程序,共同完成复杂功能;保证简单功能的高效性,复杂的程序也必然是高效性的。
    4.避免交互界面;通过简洁的命令行实现 排错,修改系统的配置,一切都是简洁明了为基础       
    5.提供机制,而非策略 
    6.Linux所有的配置信息都存放在文本文件中,修改配置只需修改其配置文件。
    
        Linux作为自由软件(GNU),同时也遵循自由软件的思想:
        自由使用
        自由学习和修改
        自由分发
        自由创建衍生版
    

    1、PS1——默认提示符

    Linux下的默认提示符
    我们通过修改,可以使其显示用户名、主机名和当前工作目录。
    -bash-3.2$ export PS1="\u@\h \w> "
    ramesh@dev-db ~> cd /etc/mail
    ramesh@dev-db /etc/mail>
    [注: 提示符修改为 "username@hostname current-dir>的形式]
    本例中PS1使用的一些代码如下:
    o \u -- 用户名
    o \h -- 主机名
    o \w -- 当前目录的完整路径。请注意当你在主目录下的时候,如上面所示只会显示~
    注意,在PS1值之后有一个空格。从个人角度来讲,使用这个空格可以增加一定的可读性。
    将export PS1=”\u@\h \w>" 添加到.bash_profile 或者 .bashrc中,则可以保证其永久有效。
    ramesh@dev-db ~> vi ~/.bash_profile
    ramesh@dev-db ~> vi ~/.bashrc
    [注: 将命令添加到以上任何一个即可]

    环境变量PS1(命令提示符),可以使用vi编辑/etc/profile文件,在最后加上:export PS1=’[u@h W]$ ‘即可,其中u显示当前用户账号,h显示当前主机名,W显示当前路径,$显示’$'符号
      
    W 代替 w 就可以实现绝对路径到相对路径的转换
      
      d :代表日期,格式为weekday month date,例如:”Mon Aug 1″
      H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
      h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
      t :显示时间为24小时格式,如:HH:MM:SS
      T :显示时间为12小时格式
      A :显示时间为24小时格式:HH:MM
      u :当前用户的账号名称
      v :BASH的版本信息
      w :完整的工作目录名称。家目录会以 ~代替
      W :利用basename取得工作目录名称,所以只会列出最后一个目录
      # :下达的第几个命令
      $ :提示字符,如果是root时,提示符为:# ,普通用户则为:$

    颜色设置
      PS1=”e[1;32mue[me[1;33m@e[me[1;35mhe[m:w$ "
    PS1="[\e[31m][\u@\h \W]\$[\e[0m]"

    e[1;xxm和e[m就是改变终端字体颜色的部分,前者是修改颜色,后者是恢复到正常显示。但是 这时还会有问题,在提示符中输入第一行时,回车换行不正常,导致显示很混乱,因此,除了这个修改之外,还需要将全部非打印字符用专用的 bash 转义序列 "[" 和 "]” 括起来。这两个序列通知 bash,被括起来的字符不占用行 上的任何空间,这样就使自动换行能够继续正常工作。

    最终版本如下(可解决带颜色提示符的不换行问题):
      PS1=”[e[1;32m]u[e[m][e[1;33m]@[e[m][e[1;35m]h[e[m]:w$ “
      其中,颜色表示为:30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white。
      如果需要改变目录在命令行下显示颜色:
      1、将/etc/DIR_COLORS文件cp到~/下,并改名为.dir_colors。
      2、编辑.dir_colors文件,找到“DIR 01;34 # directory”,将34改为36。
      你可以找到文件的两行注释:
      # Text color codes:
      # 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
      按照颜色对应的数字,你还可以把目录显示颜色改成其他的。
      同样其他的显示效果(包括背景)也可以参照说明进行修改。
      这样你就可以定制自己的linux下命令行方式下的个性化显示效果了。
      3、重新登录,就可以看到修改后的效果了。

    在Linux终端下调试程序时,有时需要输出大量信息。若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据。
    终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式下的系统显示功能,与具体语言无关。
    转义序列以控制字符'ESC'开头。该字符的ASCII码十进制表示为27,十六进制表示为0x1B,八进制表示为033。多数转义序列超过两个字符,故通常以'ESC'和左括号'['开头。该起始序列称为控制序列引导符(CSI,Control Sequence Intro),通常由'\033['或'\e['代替。
    通过转义序列设置终端显示属性时,可采用以下格式:
    \033[ Param {;Param;...}m 或 \e[ Param {;Param;...}m
    其中,'\033['或'\e['引导转义序列,'m'表示设置属性并结束转义序列。Param为属性值,{...}表示可选(多个参数之间用分号隔开,与顺序无关)。
    注意,转义序列可被控制字符'CAN'(Cancel )和'SUB'(Substitute)中断。
    转义序列相关的常用参数如下(通过man console_codes命令可查看更多的参数描述):
    显示:0(默认)、1(粗体/高亮)、22(非粗体)、4(单条下划线)、24(无下划线)、5(闪烁)、25(无闪烁)、7(反显、翻转前景色和背景色)、27(无反显)
    颜色:0(黑)、1(红)、2(绿)、 3(黄)、4(蓝)、5(洋红)、6(青)、7(白)
    前景色为30+颜色值,如31表示前景色为红色;背景色为40+颜色值,如41表示背景色为红色。
    调色效果如下图所示:


     因此,通过转义序列设置终端显示属性时,常见格式为:
     \033[显示方式;前景色;背景色m输出字符串\033[0m 或 \e[显示方式;前景色;背景色m输出字符串\033[0m
     此外,还有一些ANSI控制码,如:nA (光标上移n行 )、nB(光标下移n行 )、nC(光标右移n行 )、nD (光标左移n行 )、2J(清屏)、K(清除从光标到行尾的内容)、s(保存光标位置)、u(恢复光标位置)、?25l(隐藏光标)、?25l(显示光标)。     其中 ,'\033[0m'用于恢复默认的终端输出属性,否则会影响后续的输出。
    

    2、PS2——再谈提示符

    一个非常长的命令可以通过在末尾加“\”使其分行显示。多行命令的默认提示符是“>”。 我们可以通过修改PS2 ,将提示符修改为"continue->" 。
    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
    [注: 这里使用 ">" 作为默认提示符]
    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
    [注: 与上面类似,用 "continue-> " 作提示符]
    当用“\”使长命令分行显示,我发现非常易读。当然我也见过有的人不喜欢分行显示命令
    

    3、PS3——Shell脚本中使用select时的提示符

    你可以像下面示范的那样,用环境变量PS3定制shell脚本的select提示:
    不使用PS3的脚本输出:

    ramesh@dev-db ~> cat ps3.sh
    select i in mon tue wed exit
    do
        case $i in
            mon) echo "Monday";;
            tue) echo "Tuesday";;
            wed) echo "Wednesday";;
            exit) exit;;
        esac
    done
     
    ramesh@dev-db ~> ./ps3.sh
    1) mon
    2) tue
    3) wed
    4) exit
    #? 1
    Monday
    #? 4
    [注: 缺省的提示符是 #?]
    使用PS3的脚本输出:
    
    ramesh@dev-db ~> cat ps3.sh
    PS3="Select a day (1-4): "
    select i in mon tue wed exit
    do
        case $i in
            mon) echo "Monday";;
            tue) echo "Tuesday";;
            wed) echo "Wednesday";;
            exit) exit;;
        esac
    done
     
    ramesh@dev-db ~> ./ps3.sh
    1) mon
    2) tue
    3) wed
    4) exit
    Select a day (1-4): 1
    Monday
    Select a day (1-4): 4
    [注: 设置了PS3变量后,命令提示符已经成为 "Select a day (1-4):"]
    

    4、PS4——PS4-“set -x"用来修改跟踪输出的前缀

    如果你像下面那样在调试模式下的脚本中,PS4环境变量可以定制提示信息:
    没有设置PS4时的shell脚本输出:
    
    ramesh@dev-db ~> cat ps4.sh
     
     
    set –x
    echo "PS4 demo script"
    ls -l /etc/ | wc –l du -sh ~
     
    ramesh@dev-db ~> ./ps4.sh
        ++ echo 'PS4 demo script'
    PS4 demo script
    ++ ls -l /etc/
    ++ wc –l
    243
    ++ du -sh /home/ramesh
    48K /home/ramesh
    [注: 当使用sex -x跟踪输出时的提示符为 ++]
    设置PS4后的脚本输出:
    PS4在ps.sh中定义了下面两个变量
    o $0 显示当前的脚本名 
    o $LINENO 显示的当前的行号
    
    ramesh@dev-db ~> cat ps4.sh
    export PS4='$0.$LINENO+ '
    set -x
    echo "PS4 demo script"
    ls -l /etc/ | wc -l
    du -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 -l
    243
    ../ps4.sh.5+ du -sh /home/ramesh
    48K /home/ramesh
    [注: 使用PS4后使 "{script-name}.{line-number}+" 成为set –x的命令提示符]

    相关文章

      网友评论

        本文标题:Linux理念,提示符:PS1、PS2、PS3、PS4

        本文链接:https://www.haomeiwen.com/subject/kuapsxtx.html