黑企鹅 发表于 2005-4-12 00:52:23

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

是从附件中的图中看到的,于是想自己实现一个,但是只完成了 85%,有谁能帮忙完成剩下的部分?

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

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

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

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

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


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"
'


黑企鹅 发表于 2005-4-12 01:08:50

打印出终端里文字可用的颜色及风格

#!/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

jerryfleming 发表于 2005-4-12 10:10:47

PS1="\[\e[\u@local \w]\[\e\[\e#\[\e"

BOoRFGOnZ 发表于 2005-4-12 11:29:04

:shock:

VimChina 发表于 2005-4-12 18:34:51

这个以前MichaelBibby就帖过了,可能企鹅没看到吧~~
页: [1]
查看完整版本: 展示一个自定义的命令行提示符