Шалости с перенаправлениями

есть в составе coreutils очень забавная команда tty. все, что она делает – это выводит путь к текущему терминалу или псведотерминалу. что-то типа /dev/tty1 или /dev/pts/1. зачем это нужно, кроме как для понтов, спросите вы? а вот зачем.

к примеру, есть скриптик, кругом красивый и интерактивный, и использующий dialog, а не обычный read или подобное, для получения данных от пользователя. и есть необходимость получить какое-то значение, и сразу загнать его в переменную, без извращений с временными файлами или иными дополнительными сущностями. классический подход var=$(command) здесь не сработает. однако наворотив вот такую конструкцию

var=$(dialog --inputbox "Enter some data" 8 60 2>&1 > $(tty))

можно спокойно получить требуемый результат

Безопасность eval

и еще раз к вопросу о пользе чтения man-ов

eval считается крайне уязвимой конструкцией, особенно на произвольных данных. дескать, подставь ; и лепи себе дальше патчи бармина, сколько душе угодно.

оно то так, но есть в bash одна очень приятная штука для борьбы с этим злом – расширитель @. позволяет экранировать всякую каку без особых извратов с echo/sed/perl/whatever

Читать далее «Безопасность eval»

Временные метки при логировании

захотелось странного – меток времени в .xsession-errors. обычно этот файлик создается простым редиректом всего выхлопа через exec > blah-blah 2>&1. а далее в ход идет bash-евская магия с сопроцессами. в результате команда приобрела следующий вид

exec > >(while read ln ; do echo "[$(date)] : $ln" >> "${TMPDIR:-/tmp}/xsession-errors.$USER" ; done) 2>&1

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

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

FVWM и буфер обмена

В связи с переходом на gtk3 встал вопрос о менеджере буфера обмена. Всякие parcellite и клоны, мягко говоря, дерьмецо. Заточены в основном под gtk2. Да и хренова туча всякой дополнительной лабуды в них мне и в хер не уперлась. Пришлось воротить что-то свое. В принципе, все, что мне нужно – это хранить некую не очень большую историю и иметь возможность выбрать нужный кусок.

В результате родилось следующее. Небольшой скриптик, использующий xclip для управления буферами и fvwm для его периодического дергания и организации меню выбора нужного куска.

Читать далее «FVWM и буфер обмена»