Сценарий оболочки, фиксирующий положение терминала курсора на ma c, производит дополнительные символы - PullRequest
0 голосов
/ 02 мая 2020

Я использую ответ в https://askubuntu.com/questions/366103/saving-more-corsor-positions-with-tput-in-bash-terminal в качестве сценария оболочки, который помогает мне извлечь текущую позицию на терминале.

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]}

Однако на машине Ma c он выдает дополнительные -en с некоторыми новыми строками и пробелами, как показано ниже.

-en 
    -en 
        23 4
23 8

Как можно избежать вывода дополнительные -en и новые строки и дополнительные пробелы

1 Ответ

1 голос
/ 02 мая 2020

Использование printf вместо echo -en:

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

-e и -n для echo не являются стандартами оболочки и не все оболочки реализуют их. Некоторые оболочки (включая ту, которую вы используете) просто повторяют их, как если бы они были обычными аргументами.

printf - это стандарт оболочки. Он автоматически расширяет стандартные экранирующие коды backsla sh в своем формате, а также печатает новую строку только в том случае, если вы скажете это (обычно, указав \n в формате). Он также может делать много других полезных вещей, таких как значения пэда до определенной длины c.

...