端末の右下に文字列を出力するには?
答え1
string=whatever
stty size | {
read y x
tput sc # save cursor position
tput cup "$((y - 1))" "$((x - ${#string}))" # position cursor
printf %s "$string"
tput rc # restore cursor.
}
すべての文字が$string
1つであると仮定セル広い($string
制御文字(改行、タブなど)を含まない)。
もしあなたのひも幅にゼロ(結合文字など)または二重幅文字を含めることができる場合は、ksh93の書式printf
指定子%Ls
を使用して文字の幅に基づいて書式設定できます。
string='whatéver'
# aka string=$'\uFF57\uFF48\uFF41\uFF54\uFF45\u0301\uFF56\uFF45\uFF52'
stty size | {
read y x
tput sc # save cursor position
tput cup "$((y - 1))" 0 # position cursor
printf "%${x}Ls" "$string"
tput rc # restore cursor.
}
ただし、これにより最後の行の先頭が削除されます。
答え2
tput cup $(tput lines) $[$(tput cols)-16]
printf "string"
または
tput cup $[$(tput lines)-1] $[$(tput cols)-16]
printf "string"
ここで、16は文字列に予約したい長さです。