0

我使用https://askubuntu.com/questions/366103/saving-more-corsor-positions-with-tput-in-bash-terminal中的答案作为 shell 脚本,它适用于提取当前位置终端。

extract_current_cursor_position () {
    export $1
    exec < /dev/tty
    oldstty=$(stty -g)
    stty raw -echo min 0
    echo -en "\033[6n" > /dev/tty
    IFS=';' read -r -d R -a pos
    stty $oldstty
    eval "$1[0]=$((${pos[0]:2} - 2))"
    eval "$1[1]=$((${pos[1]} - 1))"
}

extract_current_cursor_position pos1
extract_current_cursor_position pos2

echo ${pos1[0]} ${pos1[1]}
echo ${pos2[0]} ${pos2[1]}

但是,在 Mac 机器上,它会产生额外-en的一些新行和空格,如下所示。

-en 
    -en 
        23 4
23 8

我怎么能避免输出额外的-en和新的行和额外的空格

4

1 回答 1

1

使用printf代替echo -en

printf '\033[6n' > /dev/tty

-e-n标志echo不是外壳标准,并非所有外壳都实现它们。一些 shell(包括您正在使用的那个)只是将它们作为普通参数来回显。

printf是一个外壳标准。它会自动扩展其格式的标准反斜杠转义码,并且仅在您告诉它时才打印换行符(通常通过\n在格式中放置 a )。它还可以做很多其他有用的事情,比如将值填充到特定长度。

于 2020-05-02T01:01:06.657 回答