Много использования программ Linux istty
определить, является ли STDOUT терминалом или нет. Например, ls
(по умолчанию) подавит окрашенный вывод, если он перенаправил (istty == 0
).
Когда рабочие новомодные задания, STDOUT, кажется, не перенаправляется. Процесс думает, что пишет в /dev/pts/0
.
Мое приложение использует этот тот же дедуктивный подход и при выскочке, выходные управляющие символы терминала, которые заканчиваются в файлах журнала в /var/log/upstart/myapp.log
.
Я могу или настроить новомодное задание или изменить мой (C++) источник приложения для устранения этой проблемы?
(Это не просто управляющие символы, но также и вещи как метки времени опущены от консольного вывода, но включены в файлы журнала.)
Наличие Вашей программы ведет себя по-другому в зависимости от того, с чем это подключено, осужден. Например, в Стандартах Кодирования GNU говорится :
Аналогично, don’t заставляют поведение программы командной строки зависеть от типа устройства вывода, которое это получает как стандартный вывод или стандартный вход. Независимость от устройств является важным принципом дизайна system’s; не ставьте под угрозу его просто для сохранения кого-то от ввода опции время от времени. (Изменение в синтаксисе сообщения об ошибке при использовании терминала в порядке, потому что это - второстепенный вопрос, от которого не зависят люди.)
Вместо этого полагайте, что добавляющие параметры командной строки к Вашей программе изменяют поведение, и использующий их в Вашем новомодном задании.