動的ラインを使用したSolaris KSH設定PS1

動的ラインを使用したSolaris KSH設定PS1

2行でプロンプト(PS1)を設定したいです。最初の行の終わりからすべてのスペース(行の終わりから端末の右枠まで)を1行で埋めたいと思います(例:_______)。

どうすればいいですか?

私の現在のヒントは次のとおりです。

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で、シェルは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/kshSolaris 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/kshSolaris 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でも動作するはずです。最初は/usr/bin/kshを使用してSolaris 11(93u 2011-02-08)とDebian(93u + 2012-08-01)で正常にテストされ、93t +で動作します2009 では -05-01 を使用し、Solaris 10 では /usr/bin/ksh(M-11/16/88i) および /usr/dt/bin/dtksh(93d) を使用して正常にテストされました。

おすすめ記事