Про эстетику и терминал
Записывал я тут какое-то видео и заметил, что меня пиздец бесит такое поведение:
- Открываю терминал.
- Запускаю, к примеру,
sleep 10. - Курсор перескакивает на новую строку.
Но команда sleep ещё не завершилась, а курсор уже выпрыгнул из штанов.
Хочу, чтобы курсор после запуска команды не перескакивал на новую строку, а ждал завершения команды.
Люблю я себе головняк создать на ровном месте. Поехали решать, чо!
cursor_killer() {
echo -ne '\e[?25h'
trap 'echo -ne "\e[?25l"; trap DEBUG' DEBUG
}
PROMPT_COMMAND='cursor_killer'
Получилась такая упоротая и непонятная функция.
Что происходит?
Инициализируем переменную PROMPT_COMMAND. Эта команда выполняется перед выводом строки приглашения (prompt).
Дальше делаем курсор видимым с помощью echo. А следом скрываем курсор перед выполнением каждой команды с помощью trap.
В trap мы установили обработчик для псевдосигнала DEBUG.
help trap
If a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.
\e[?25h— включает отображение курсора (h= “show”).\e[?25l— отключает отображение курсора (l= “low visibility” или “hide”).
Получилось так:
- Первая команда делает курсор видимым.
- Вторая команда установит обработчик на сигнал DEBUG.
- Обработчик скрывает курсор и сбрасывает обработчик для сигнала DEBUG в дефолт.
Сохраняем эту поделку в cur_killer.sh и запускаем, когда нам это нужно. Либо делаем source cur_killer.sh.
Ну а чтобы эта штука оказалась тебе полезной, можешь написать свой отладчик Bash-скриптов.
К примеру, будем выводить команду перед её выполнением:
trap 'echo "RUN: $BASH_COMMAND"' DEBUG
Теперь позапускай sleep, ls или что-то ещё: перед выполнением команды на экран будет выводиться команда. К примеру, так:
trap 'echo "RUN: $BASH_COMMAND"' DEBUG
ls
RUN: ls --color=auto -la
Покеда! Вечером ещё увидимся, декабрь прямо шепчет на контент и интеграции. В январе уж отдохнём.








Комментарии