我想用两行配置我的提示符(PS1)。在第一行的末尾,我想用一行填充所有空白(从行尾到终端的右侧边框)(如下所示: _______ )
我怎样才能做到这一点?
目前我的提示是:
export PS1="$(echo "\033[37mroot@\033[34m`hostname`:\033[31m\${PWD}# \033[0m")"
打印:
root@myhost:/export/home/myid#
我希望它是:
root@myhost:/export/home/myid____________________________________________
#
稍后我计划在 PWD 之后添加更多内容。
系统是solaris 10,shell是eksh
5.10 Generic_144488-17 sun4v sparc SUNW
#eksh --version
version sh (AT&T Research) 93t+ 2009-05-01
我在这里找到了一些东西,但它不起作用。跨终端线路
答案1
对于 ksh93(eksh
显然就像您/usr/bin/ksh
在 Solaris 11 上一样):
LOGNAME=$(logname)
HOSTNAME=$(hostname)
PS1='$(printf "\e[37m%s:\e[34m%s\e[4m%*s\e[m\n# " \
"$LOGNAME@$HOSTNAME" "$PWD" \
"COLUMNS - ${#LOGNAME} - ${#HOSTNAME} - ${#PWD} - 2")'
ksh88(就像/usr/bin/ksh
在 Solaris 10 上一样)没有$COLUMNS
,并且不扩展命令替换$PS1
(尽管它进行参数扩展),但您可以执行以下操作:
LOGNAME=$(logname)
HOSTNAME=$(hostname)
get_COLUMNS() {
COLUMNS=$(stty -a)
COLUMNS=${COLUMNS#*columns = }
COLUMNS=${COLUMNS%%;*}
}
get_COLUMNS
trap get_COLUMNS WINCH
ESC=$(printf '\33')
s=
while ((${#s}<300)); do
pad[${#s}]=$s
s="$s "
done
PS1="$ESC[37m\$LOGNAME@\$HOSTNAME:$ESC[34m\$PWD$ESC[4m\
"'${pad[COLUMNS - ${#LOGNAME} - ${#HOSTNAME} - ${#PWD} - 2]}'"$ESC[m
# "
(那个也应该与 ksh93 和 bash 一起使用。第一个在 Solaris 11 (93u 2011-02-08) 和 Debian (93u+ 2012-08-01) 上使用 /usr/bin/ksh 成功测试,并且应该与 93t+ 2009 一起使用-05-01 以及在 Solaris 10 上使用 /usr/bin/ksh (M-11/16/88i) 和 /usr/dt/bin/dtksh (93d) 测试成功。