Ksh
Solaris KSH 使用動態線設置 PS1
我想用兩行配置我的提示符(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
我在這裡找到了一些東西,但它不起作用。line_Across_terminal
對於 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) 成功測試)