Как отключить прокрутку терминала в скрипте Bash?

Когда вы запускаете скрипты, запускается отдельный процесс, со своими параметрами, функциями и т.д.. Этот процесс наследует окружение от родительской оболочки, но после этого они живут отдельной жизнью. Вы не можете cd-куда-нибудь в родительский шелл из подшелла точно так же, как вы выполняете отправку любой другой команды в одном процессе из другого процесса. Другими словами, нет никакой магии вроде

command "run in process 123456"

Теперь, хотя вы не можете послать процессу команду на выполнение, вы можете послать сигнал процессу с помощью команды kill. Таким образом, если вы заранее подготовите родительский shell к этой ситуации, вы сможете поймать этот сигнал и выполнить какую-нибудь команду.

Вот минимальный пример:

/home/jimmij $ trap 'cd /tmp' INT
/home/jimmij $ cat myscript.sh
#!/bin/bash
echo Changing parent directory
kill -s SIGINT $PPID

/home/jimmij $ ./myscript.sh
Changing parent directory

/tmp $
1
26.11.2018, 18:41
1 ответ

htop случайно использует ncurses

ncurses (и другие вещи, использующие полноэкранный режим в терминале )инициализируют терминал, используя возможность terminfosmcup. Для xterm (и имитирующих его эмуляторов терминала )происходит переключение на альтернативный экран . Эти терминалы могут реагировать на колесико мыши, отправляя клавиши курсора вверх/вниз вместо прокрутки окна терминала (, которое вы видели бы в htopпри перемещении линии -фокуса вверх/вниз ). Ваш сценарий bash может видеть эти клавиши курсора, но не обрабатывать их.

Вы можете поэкспериментировать с этой функцией в скрипте, используя

tput smcup

для переключения на альтернативный экран и

tput rmcup

, чтобы вернуться к обычному экрану.

3
27.01.2020, 23:31

Теги

Похожие вопросы