QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1667|回复: 4

展示一个自定义的命令行提示符

[复制链接]
发表于 2005-4-12 00:52:23 | 显示全部楼层 |阅读模式
是从附件中的图中看到的,于是想自己实现一个,但是只完成了 85%,有谁能帮忙完成剩下的部分?

就是右下角的部分,我认为大概的思路是在第二行示符里,放入控制光标的字符,先移到行末适当的位置,打印,然后再移回原位,但是有一个要注意的问题,当在命令行上输入很长的命令时,肯定不能覆盖右下角的文字,不然就不算最好的结果。

我在原效果的基础上在中上加了当前目录中文件和目录总数,第二个数为包含隐含文件的总数。

把而下这一段复制到 ~/.bashrc 中即可,重新打开终端。或者直接把这一段贴到终端里也可以看到效果。

其中的 PROMPT_COMMAND 是每次显示提示符要执行的命令。详细说明请参见:

Bash Prompt HOWTO
http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/index.html

[code:1]
CL="\[\e[0m\]"
GREEN="$CL\[\e[0;32m\]"
BGREEN="$CL\[\e[0;32;1m\]"
XORG="$CL\[\e[0;36m\]"
XRED="$CL\[\e[0;35m\]"
ORG="$CL\[\e[0;33m\]"

DARK_GRAY="$CL\[\e[1;30m\]"

BLUE="$CL\[\e[1;34m\]"

export PROMPT_COMMAND='

LINE="-"
#LINE="─"
#L1h="┎"
#L1h="☯"
#L1e="┒"
#L2h="┖"
#L2e="┚"
L1h=""
L1e=""
L2h=""
L2e=""

ntty=$(tty | cut -d"/" -f3-4)
f1=$(ls | wc -l)
f2=$(ls -a | wc -l)

L1l="$LINE($USER@$HOSTNAME:$ntty)$LINE"
l_L1l=`expr length "$L1l"`
#echo "$L1l $l_L1l"

L1r="$LINE($PWD)$LINE($f1/$f2)$LINE"
l_L1r=`expr length "$L1r"`
l_home_m=`expr match $PWD $HOME`
if [ $l_home_m -gt 0 ]; then
  let l_home_m=l_home_m-1
else
  l_home_m=0
fi
#echo "$L1r $l_L1r"

let l_c=COLUMNS-l_L1l-l_L1r+l_home_m

L1c=""
c="$LINE"
n="$l_c"
#echo "col: $COLUMNS n: $n"

while [ "$n" -gt 0 ]; do L1c="$c$L1c"; let n=n-1; done

L1l="$BLUE$LINE($BGREEN\u$GREEN@\H:$ntty$BLUE)$LINE"
L1r="$BLUE$LINE($XRED\w$BLUE)$LINE$BLUE($DARK_GRAY$f1/$f2$BLUE)$LINE"
L1c="$DARK_GRAY$L1c"

L2l="$BLUE$LINE(:$ORG\A$BLUE:$XRED\$$BLUE)$LINE$GREEN>$CL "
L2r="$GREEN$LINE$BLUE$LINE($ORG\d$BLUE)$LINE"
export PS1="$L1l$L1c$L1r\n$L2l"
'


[/code:1]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2005-4-12 01:08:50 | 显示全部楼层
打印出终端里文字可用的颜色及风格
[code:1]
#!/bin/sh
############################################################
# Nico Golde <nico(at)ngolde.de> Homepage: http://www.ngolde.de
# Last change: Mon Feb 16 16:24:41 CET 2004
############################################################

for attr in 0 1 4 5 7 ; do
    echo "----------------------------------------------------------------"
    printf "ESC[%s;Foreground;Background - \n" $attr
    for fore in 30 31 32 33 34 35 36 37; do
        for back in 40 41 42 43 44 45 46 47; do
            printf '\033[%s;%s;%sm %02s;%02s  ' $attr $fore $back $fore $back
        done
        printf '\033[0m\n'
    done
    printf '\033[0m'
done
[/code:1]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2005-4-12 10:10:47 | 显示全部楼层
PS1="\[\e[33;40m\][\u@local \w]\[\e[32;40m\]\[\e[01m\]#\[\e[0m\]"
回复

使用道具 举报

发表于 2005-4-12 11:29:04 | 显示全部楼层
回复

使用道具 举报

发表于 2005-4-12 18:34:51 | 显示全部楼层
这个以前MichaelBibby就帖过了,可能企鹅没看到吧~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-10-4 19:22 , Processed in 0.101332 second(s), 17 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表