Answers:
我有一个~/bin/setprompt
由我执行的脚本.bashrc
,其中包含:
RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"
# Throw it all together
PS1="${RESET}${YELLOW}\h${NORMAL} \`${SELECT}\` ${YELLOW}>${NORMAL} "
该脚本将提示设置为主机名,然后:)
是最后一条命令是否成功以及:(
最后一条命令是否失败。
但是,这是我见过的最厉害的一个:
PS1='\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[0;28m\]Managing \033[1;31m\]\j\[\033[0m\]\[\033[1;30m\]/\[\033[0m\]\[\033[1;31m\]$(ps ax | wc -l | tr -d '\'' '\'')\[\033[0m\]\[\033[1;30m\] \[\033[0m\]\[\033[0;28m\]jobs.\[\033[0m\]\[\033[1;30m\]] [\[\033[0m\]\[\033[0;28m\]CPU Load: \[\033[0m\]\[\033[1;31m\]$(temp=$(cat /proc/loadavg) && echo ${temp%% *}) \[\033[0m\]\[\033[0;28m\]Uptime: \[\033[0m\]\[\033[1;31m\]$(temp=$(cat /proc/uptime) && upSec=${temp%%.*} ; let secs=$((${upSec}%60)) ; let mins=$((${upSec}/60%60)) ; let hours=$((${upSec}/3600%24)) ; let days=$((${upSec}/86400)) ; if [ ${days} -ne 0 ]; then echo -n ${days}d; fi ; echo -n ${hours}h${mins}m)\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:.\n\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[1;31m\]$(ls -l | grep "^-" | wc -l | tr -d " ") \[\033[0m\]\[\033[0;28m\]files using \[\033[0m\]\[\033[1;31m\]$(ls --si -s | head -1 | awk '\''{print $2}'\'')\[\033[0m\]\[\033[1;30m\]] [\[\033[0m\]\[\033[1;31m\]\u\[\033[0m\]\[\033[0;31m\]@\[\033[0m\]\[\033[1;31m\]\h \[\033[0m\]\[\033[1;34m\]\w\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:.\n\[\033[0m\]\[\033[0;31m\].:\[\033[0m\]\[\033[1;30m\][\[\033[0m\]\[\033[1;31m\]\t\[\033[0m\]\[\033[1;30m\]]\[\033[0m\]\[\033[0;31m\]:. \[\033[0m\]\[\033[1;37m\]$ \[\033[0m\]'
试一试。它提供了很好的信息,但实际上仅在提示时按Enter键,实际上会使框上的负载增加!
这是我的(向右滚动可查看更多有趣的内容):
'-------------------------------------------------------------------------------\n${debian_chroot:+($debian_chroot)}[\w]\n\u@\h\[\033[1;33m\]\[\033[0m\]($(__git_ps1 "%s")$(parse_git_dirty))$
结果如下:
-------------------------------------------------------------------------------
[~]
user@host()$
-------------------------------------------------------------------------------
[~/path_to_repo]
user@host(master)$
我选择使用多个换行符和“水平标尺”来更轻松地扫描缓冲区,因此较长的路径名不会将光标推到右边。
在ksh中:
在我的.profile中,我设置了以下变量(因此,无论我执行多少次“ su”操作,此变量每次会话都只会设置一次):
PCH=\>
在我的.kshrc中,我有:
if let "${SPID:-0} != $$"; then
PCHS="$PCHS$PCH"
fi
我使用以下别名而不是“ su”成为root用户(kroot是具有ksh shell而不是sh(solaris)或bash(linux)的root用户:
alias root='PCH=\# su -m kroot'
alias me="PCH=\> su -m $USER"
我还定义了这两个功能:
function lprompt {
PS1=$HOST' $? $PWD '"$PCHS "
}
function sprompt {
PS1='$?":"${PWD##*/}'"$PCHS "
}
最后在.kshrc结尾,我有:
lprompt
所有这些默认情况下都会为我自动设置提示的末尾,以指示我是否是root(反过来,如果我的父母是root),当前工作目录,主机名以及上一个进程的退出状态。sprompt删除主机名,将路径缩小到仅基本名,并删除空格:
g3 0 /home/jj33 > expr 1 / 0 expr: division by zero g3 2 /home/jj33 > expr 1 / 1 1 g3 0 /home/jj33 > root Password: g3 0 /home/jj33 ># me g3 0 /home/jj33 >#> ^D g3 0 /home/jj33 ># sprompt 0:jj33># me g3 0 /home/jj33 >#> sprompt 0:jj33>#>expr 1 / 0 expr: division by zero 2:jj33>#>
root / me别名来自Solaris上的pre-sudo管理,并且旧习惯很难改掉。我怀疑这些天有人会实施完全相同的事情。瞬息万变的功能和存在的状态对我仍然很有价值。
我有一个简单的提示,但是使用颜色来提供一些额外的信息:
drewble:~$
主机名的颜色(在这种情况下为双色)在每台计算机上都不相同-当我得到要使用的新计算机时,我为该计算机选择了任意颜色。这样,当我打开许多终端时,可以很容易地知道将它们连接到哪台计算机,并减少由于使用错误的计算机而造成的错误。另外,当我这样做时sudo -s
,我将主机名大写,并用冒号涂成红色,这再次表明您是root用户,从而减少了错误。路径(~
在本例中为我的主目录)为鲜绿色,这有助于分开输出行;如果某些东西产生了很多输出,则很容易向上滚动并查看输出从何处开始。
# Color the hostname
HOSTNAME=`hostname|sed -e 's/\..*$//'`
if [ $HOSTNAME = 'Caligula' ] || [ $HOSTNAME = 'Caligula.local' ]; then
export HOST_COLOR="\[\033[1;35m\]"
fi
if [ $HOSTNAME = 'drewble' ]; then
export HOST_COLOR="\[\033[1;34m\]"
fi
if [ $HOSTNAME = 'davinci' ]; then
export HOST_COLOR="\[\033[1;31m\]"
fi
# Color the colon red & capitalize hostname if root
COLON_COLOR='0m'
if [ ${UID} -eq 0 ]; then
COLON_COLOR='1;31m'
fi
if [ ${UID} -eq 0 ]; then
HOSTNAME="`echo $HOSTNAME|tr '[a-z]' '[A-Z]'`"
fi
# Set the actual prompt
PS1=`echo -ne "$HOST_COLOR$HOSTNAME\[\033[00m\]\[\e[$COLON_COLOR\]:\[\033[01;32m\]\w\[\033[00m\]\\[\033[01;33m\]\$\[\033[00m\] "`
它不是shell提示,而是一种自定义设置,可能符合您的要求。
我设置以下环境变量:
if [ -z "$PROMPT_COMMAND" ]; then
export PROMPT_COMMAND='history -a'
else
export PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
fi
这样,如果我有多个通过屏幕或其他任何方式打开的终端,那么当它们相互更改时,我将不会丢失任何历史记录。
我的zsh提示:
[andrew@hostname ~]%
通常,它是红色和白色,当前目录是粉红色。如果是root,则为深灰色,主机名为红色。如果$?
不为0,则最后的%以红色显示。
function precmd {
ERR=$?
if [ $UID -eq 0 ]; then
MYPROMPT="$(print '%{\e[1;30m%}[%{\e[0m%}')$(print '%{\e[1;31m%}%n%{\e[0m%}')@$(print '%{\e[1;31m%}%m%{\e[0m%}') $(print '%{\e[1;35m%}%3c%{\e[0m%}')$(print '%{\e[1;30m%}]%{\e[0m%}')"
else
MYPROMPT="[$(print '%{\e[1;31m%}%n%{\e[0m%}')@%m $(print '%{\e[1;35m%}%3c%{\e[0m%}')]"
fi
if [ $ERR -ne 0 ]; then
ERROR="$(print '%{\e[1;31m%}%#%{\e[0m%}') "
export PS1=$MYPROMPT$ERROR
else
export PS1="$MYPROMPT%# "
fi
export RPS1=""
}