如何获取终端中可用(未使用)的行数?

如何获取终端中可用(未使用)的行数?

stty我可以使用或获取总行数和总列数tput,但是如何获取可用的行数(未使用)或 bash 或任何其他 shell 中当前行/行的索引/编号?

例子:

$ ls
foo bar baz
$ (cursor is here)
.
.

该终端有 5 行。 “当前行”为 3,光标后的可用行/空行数为 2。

答案1

尝试这个:

#!/bin/bash

if ! termios="$(stty -g 2>/dev/null)" 
then
    echo "ERROR: Not running in a terminal"
    exit 1
fi


# Get max rows and columns
maxrows=$(tput lines)
maxcols=$(tput cols)

# Disable ICANON ECHO
stty -icanon -echo

# Get cursor position
tput u7
read -d "R" rowcol

# Revert to original settings
stty "$termios"

# clean up response
rowcol="${rowcol//[^0-9;]/}"
rowcol="${rowcol//;/ }"

printf 'maxrows: %d  maxcols: %d  currow: %d  curcol: %d\n' $maxrows $maxcols ${rowcol[0]} ${rowcol[1]}

exit 0

相关内容