zoukankan      html  css  js  c++  java
  • linux 101 hacks 5PS1

    PS1——默认提示符

    看完这一章,我心里若干个卧槽。。

    如下所示, 可以通过修改 Linux 下的默认提示符,使其更加实用。在下面的例子中,默认的 PS1
    的值是“ s-v$”,显示出了 shell 的名称的版本。 我们通过修改,可以使其显示用户名、主
    机名和当前工作目录。

    -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” 的详细用法可以参见下面

    技巧 30: 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-> " 作提示符]

    当用“ ” 使长命令分行显示,我发现非常易读。当然我也见过有的人不喜欢分行显示命令

    在提示符里显示当前时间

     在 PS1 定义的环境变量下可以以$(LINUX COMMAND)的方式执行 LINUX 命令,在下面的例子中
    用$(date)在提示中显示当前时间:  

    ramesh@dev-db ~> export PS1="u@h [$(date+%k:%m:%S)]> "
    ramesh@dev-db [11:09:56]>

    你还可以用 使时间以 hh:mm:ss 格式显示:

    ramesh@dev-db ~> export PS1="u@h [	]> "
    ramesh@dev-db [12:42:55]

     你还可以用@使当前时间以 12 小时制显示:

    ramesh@dev-db ~> export PS1="[@] u@h> "
    [04:12 PM] ramesh@dev-db>

    可能是版本不一样把,我这样子设置的

    dahu@dahu-OptiPlex-3046:~$ cat .bashrc |grep 'PS1'
    PS1="[$(date +%H:%M:%S)] u@h w> "
    效果就变成这样了
    [13:47:53] dahu@dahu-OptiPlex-3046 ~> cd myfile/
    [13:47:59] dahu@dahu-OptiPlex-3046 ~/myfile> 

    任意命令的输出作为提示符

    你可以在提示里显示任意 LINUX 命令的输出,下列命令显示了三项信息,以"|" 做分隔:

    ! 历史命令的个数
    h 主机名
    $kernel_version 用name -r 显示内核信息
    $! 最后一条命令的状态

    ramesh@dev-db ~> kernel_version=$(uname -r)
    ramesh@dev-db ~> export PS1="!|h|$kernel_version|$?> "
    473|dev-db|2.6.25-14.fc9.i686|0>

    改变提示符的前景颜色

    用蓝色显示提示符中的用户名,主机名,和当前目录信息:

    $ export PS1="e[0;34mu@h w> e[m "
    [注: 亮蓝色]
    $ export PS1="e[1;34mu@h w> e[m "
    [注: 暗绿色]

    e[ ——表示颜色的提示的起始位置

    x;ym ——表示颜色的代码。颜色的代码在下面有说明

    e[m ——表示代颜色的提示的结束位置

    颜色代码:
    黑 0:30
    蓝 0;34
    绿 0;32
    青 0;36
    红 0;31
    紫 0;35
    棕 0;33
    [注: 用 1 代替 0,可以使之变成黑体]

    将下面的内容写入~/.bashrc 或~/.bash_profile 可以使其永久生效

    $ vi ~/.bash_profile
    STARTCOLOR='e[0;34m';
    ENDCOLOR="e[0m"
    export PS1="$STARTCOLORu@h w> $ENDCOLOR"

    改变提示符的背景色

    在 PS1 变量用“/e{code}m” 语句改变提示符的背景色:

    $ export PS1="e[47mu@h w> e[m "
    [注: 显示亮灰背景]

    同时改变前景色和背景色。

    $ export PS1="e[0;34me[47mu@h w> e[m "
    [注: 显示亮蓝突出亮灰背景]

    在~/.bashrc 或~/.bash_profile 中添加如下语句使上面的关于前景色和和背景色的设置保
    存下来。

    $ vi ~/.bash_profile
    STARTFGCOLOR='e[0;34m';
    STARTBGCOLOR="e[47m"
    ENDCOLOR="e[0m"
    export PS1="$STARTFGCOLOR$STARTBGCOLORu@h w>
    $ENDCOLOR"

    尝试下下面的背景色,挑选一个你喜欢的:

    o e[40m
    o e[41m
    o e[42m
    o e[43m
    o e[44m
    o e[45m
    o e[46m
    o e[47m

     使用已有的 PS1 变量创建自己的提示符

    a ASCII响铃字符
    d 以―星期 月 日‖的格式显示日期 (例如, ―Tue May 26‖)
    D{format} - 格式传给strftime(3),返回的结果的传入到提示字符串中,空的
    式会被本地指定的时间取代,需要括号。
    e ASCII转义字符
    h 将主机名作为提示符的第一部分
    H 主机名
    j 当前shell管理的作业数
    l shell终端名称
    换行
    回车
    s shell名, $0 的基础名(最后一个斜线的部分)
    以 24-hour HH:MM:SS 格式显示当前时间
    T 以 12-hour HH:MM:SS 格式显示当前时间
    @ 以 12-hour am/pm格式显示当前时间
    A 以 24-hour HH:MM 格式格式显示当前时间
    u 当前用户的用户名
    v bash的版本号(例如 2.00)
    V bash发行版,版本号+补丁号(例如 2.00.0)
    w 当前工作目录,当工作目录是$HOME时,用波浪号表示
    W 当前工作目录全路径,当工作目录是$HOME时,用波浪号表示
    ! 命令历史序号
    # 当前命令的命令号
    $ 如果有效的用户ID是 0,这个值是#,否则为$
    nn 字符相应的八进制数
    \ 反斜杠
    [ 非输出字符的开始标记,可以嵌入到提示的终端控制序列中
    ] 非输出字符的结束标记

    通过 PS1 调用 bash shell 函数

    你可以像下面那样在 PS1 中调用一个 bash shell 函数:

    ramesh@dev-db ~> function httpdcount {
    > ps aux | grep httpd | grep -v grep | wc -l
    > }
    ramesh@dev-db ~> export PS1="u@h [`httpdcount`]> "
    ramesh@dev-db [12]>
    [注: 显示当前运行的 httpd 进程的总数]

    其实前面放时间的那一步就可以想到这了,那基本上都可以了。

    通过 PS1 中调用 shell 脚本

    你可以在 PS1 中使用脚本。本例中在 PS1 中调用~/bin/totalfilesize.sh 脚本 ,该脚本可以计
    算当前目录下的所有文件大小的总和。

    ramesh@dev-db ~> cat ~/bin/totalfilesize.sh
    for filesize in $(ls -l . | grep "^-" | awk '{print
    $5}')
    do
    let totalsize=$totalsize+$filesize
    done
    echo -n "$totalsize"
    ramesh@dev-db ~> export PATH=$PATH:~/bin
    ramesh@dev-db ~> export PS1="u@h [$(totalfilesize.sh) bytes]> "
    ramesh@dev-db [534 bytes]> cd /etc/mail
    ramesh@dev-db [167997 bytes]>
    [注: 通过 PS1 调用 totalfilesize.sh 显示当前目录所有文件的总和]

    我只能说,作者脑洞很大,666.

  • 相关阅读:
    uniapp判断token多次登录问题
    vue强制刷新子组件到初始状态
    时间戳转化时间过滤器
    axios二次封装具有请求/响应拦截的http请求
    vue常见的工具函数
    解决npm i 初始化,core-js报错
    node环境变量配置
    scss基本使用
    Vue element-ui父组件控制子组件的表单校验
    antd-Calendar(日历)自动嵌入对应时间问题
  • 原文地址:https://www.cnblogs.com/dahu-daqing/p/7814611.html
Copyright © 2011-2022 走看看