Привет, всем, ага. С утра разминочка, а ближе к обеду про более серьезные вещи поговорим.



Наверняка ты знаешь, что при нажатии сочетания клавиш CTRL+D завершится текущая интерактивная оболочка. То есть если ты сидишь на сервере по ssh и нажал CTRL+D, сессия прервется. ОК.



При нажатии такого сочетания, оболочка при чтении устройства терминала получит признак конца файла и завершится если строка пуста. Нюанс, если в командной строке набрать какие-то символы и нажать CTRL+D, то ничего не произойдет.



Как еще можно завершить сессию с командной оболочкой? Ну например установить значение переменной TMOUT больше нуля. Цифра будет означать секунды.



# TMOUT=5



Текущая сессия закроется через 5 секунд.



Следующий вариант это активировать параметр оболочки «t» с помощью команды set.



set -t 



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



set -t ; read



Выход произойдет, только после нажатия клавиши Enter. А в примере ниже:



set -t ; read -t3



Выход будет произведен после нажатия Enter ИЛИ по прошествию 3х секунд.



Так. Еще есть вариант с параметром «e». Указав его оболочка завершает работу после возникновения ошибки. Например:



set -e ; false



Команда false ничего не делает, но завершается всегда с ошибкой. Как правило, используется при написании bash скриптов.



Более человеческий пример:



set -e ; Паравозблять



И снова выкинуло. Потому что вернулась ошибка - Паравозблять: command not found.



Что еще упустили…
Упустили команду exec. Подвешиваем на стандартный ввод устройство /dev/null.



exec </dev/null



При чтении этого устройства оболочка получит признак конца файла и успешно завершится.



Ааа, еще же exit есть. Не буду его обижать, пусть тоже в этом посте присутствует.



Ну и как обычно, на закуску.



stty eof $'\t'



Ёпта, что это? Это хак. После выполнения этой команды у тебя появится возможность закрыть текущую оболочку по нажатию на клавишу TAB. Ввод символа табуляции, посылает сигнал конца файла и оболочка прекращает свою работу.



stty (Set Teletype) - Эта команда управляет настройками терминала и позволяет пользователю вносить изменения в терминал и отображать его характеристики.



Всё, стоп! После обеда покажу, как с помощью strace можно инжектить в системные вызовы процессов для отладки некоторых ёбнутых случаев. Увидимся!



tags: #bash #linux



💩 @bashdays