Проблема заключалась в том, что файл конфигурации по умолчанию назывался 50-defaults.conf
, поэтому он обрабатывался первым...
Это означает, что журналы отправляются в /var/log/syslog
в соответствии с конфигурацией по умолчанию, а затем они проходят через мой файл конфигурации, который выполняет остановку, но это не имело значения, потому что после этого ничего не было.
Переименовав его в 10-myapp.conf
, проблема устранена.
Стандарт POSIX действительно таков, что значение переменной окружения COLUMNS
заменяет другие способы получения размера терминала. Стандарт описывает одну из целей переменной как «отображение данных в области, произвольно меньшей, чем терминал или окно», среди прочего, что соответствует тому, что вы хотите.
Эти другие способы не стандартизированы, но они обычно представляют собой ioctl()
из TIOCGWINSZ
по отношению к дескриптору открытого файла терминального устройства. Ваша программа делает это; хотя он просто предполагает без проверок isatty()
, что его стандартный вывод является терминальным устройством.
К сожалению, есть программы, которые не учитывают переменную окружения COLUMNS
, и ваша, к сожалению, одна из них. Вместо этого он предоставляет собственный идиосинкразический нестандартный механизм -, настройки detection
и defaultwidth
в своем файле конфигурации.
Огорчает то, что они работают наоборот COLUMNS
переменной окружения. Они являются запасным вариантом, а не переопределением. Вы должны отключить detection
, чтобы программа перестала использовать TIOCGWINSZ
и вернулась к значениям по умолчанию. Затем вы должны установить значение для defaultwidth
, которое равно 80, если не установлено, и 65536 с принудительным отключением обнаружения, если оно равно нулю.
Дальнейшее дополнение к печали заключается в том, что отключение detection
относится как к ширине, так и к высоте,в отличие от стандартных переменных POSIX COLUMNS
и LINES
, которые работают независимо друг от друга. Таким образом, вы также должны позаботиться о defaultheight
, который равен 24, если не установлен, и 65536 с принудительным обнаружением, если ноль.
Вы могли бы , в качестве альтернативы, оставить обнаружение включенным и вместо этого обмануть свою программу с помощью псевдо-терминала -. tmux
— это сложный способ добиться этого со всеми этими ключами и использованием промежуточных файлов. Использование Бернштейна ptybandage
иstty columns
(для внутреннего псевдо-терминала -)проще, занимает одну строку и выводит на стандартный вывод в режиме реального времени по мере выполнения вашей программы :
ptybandage sh -c 'stty columns 40 ; exec task'.
ptybandage
. djbwares . ptybandage
. Направляющая ноша . Программное обеспечение.