在终端右下角输出字符串

在终端右下角输出字符串

如何在终端右下角输出字符串?

答案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都是一个细胞宽(并且$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 是您要为字符串保留的长度。

相关内容