последовательность tput, которая не приводит к видимым изменениям?

Мне часто приходится подключаться по ssh к удаленной системе, которая, если я столкнусь с N минут бездействия (где N довольно мало), разорвет мое соединение. Я устал от того, что меня выгоняют и я теряю свою работу/контекст только потому, что, например, я пошел искать что-то в Интернете, и это заняло немного времени.

Я пытался придумать простой сценарий, который я мог бы запускать в фоновом режиме и который просто время от времени отправляет небольшое количество вывода на терминал, поэтому я не выйду из системы.

Конечно, в идеале я бы хотел, чтобы вывод не мешал тому, что я делаю, независимо от того, что я делаю — простой текст, проклятия, что угодно.

Поэтому я ищу некоторые возможности tput, которые будут сбрасывать таймер ввода-вывода, но приведут к тому, что внешний вид экрана не будет отображаться. Я нашел много вещей, которые близки, но пока что все они могут привести к сбою, если время будет выбрано неправильно.

Что я сейчас делаю, так это

echo -e "$(tput sc)$(tput rc)\c"

(сохранить курсор, восстановить курсор). До сих пор это хорошо служило мне, но я уверен, что это всего лишь вопрос времени, прежде чем это произойдет между некоторыми программами проклятий, выполняющими собственное сохранение / восстановление, и испорченными.

cub и/или cuf (курсор назад, курсор вперед) выглядят так, как будто они почти могут работать. Если бы кто-то из них вообще не перемещал курсор при заданном параметре 0, это было бы именно то, что я ищу. Но, к сожалению для меня, 0 ведет себя точно так же, как 1 (курсор перемещается на одну позицию в любом направлении). По крайней мере, для терминала, который я использую, это так.

echo -e "$(tput cub1)$(tput cuf1)"

отлично работает, за исключением случаев, когда это происходит, когда курсор находится у левого края экрана. В этом случае cub1 ничего не делает, но тогда cuf1 перемещает курсор.

Если бы я перевернул их:

echo -e "$(tput cuf1)$(tput cub1)"

тогда у меня были бы проблемы только в том случае, если бы это произошло, когда курсор находился у правого края экрана, и я полагаю, что это, вероятно, происходит реже. Все еще...

Если бы я мог понять, как получить текущую позицию курсора, я бы получил ее, а затем использовал ее, чтобы перейти туда, где она уже есть. Но, похоже, нет способа получить текущую позицию курсора. (Или я просто пропустил это?)

mrcup с 0 для параметров может работать, если мой терминал поддерживает mrcup, но это не так.

Вещи как

echo -e '\c'

а также

cat /dev/null

привести к тому, что на терминал вообще ничего не поступит, поэтому не сбрасывайте таймер бездействия.

Кажется, должен быть какой-то простой способ.

Любые идеи?


person Phil    schedule 18.05.2017    source источник


Ответы (1)


Я думаю, что у меня есть это:

echo -e '\000\c'
person Phil    schedule 18.05.2017