Да, это сделано намеренно.
На странице руководства для systemctl disable
указано:
Отключает один или несколько модулей. Это удаляет все символические ссылки на указанные файлы модуля из каталога конфигурации модуля и, следовательно, отменяет изменения, сделанные с помощью enable. Однако обратите внимание, что при этом удаляются все символические ссылки на файлы модуля (т.е.в том числе добавленные вручную), а не только те, которые фактически созданы с помощью enable.
Вот ссылка: https://www.freedesktop.org/software/systemd/man/systemctl.html #
Он не объясняет почему, но я могу предположить, что он не может отличить ссылки, созданные с помощью systemctl enable
, и созданные вручную, поскольку он ищет ссылки, указывающие на файл модуля.
Вы должны использовать опцию ссылка
в systemctl при создании символической ссылки на исходный файл вне пути поиска systemd.
Также из той же справочной страницы.
link FILENAME ...
Свяжите файл объекта, которого нет в путях поиска файлов объекта, с путем поиска файла объекта. Для этого требуется абсолютный путь к файлу модуля. Эффект от этого можно отменить с помощью disable. Результатом этой команды является то, что файл объекта доступен для запуска и других команд, хотя он не устанавливается непосредственно в путь поиска объекта.
Для такого рода приложений я запускаю программу с помощью script
(чтобы не менять ее поведение при перенаправлении вывода в файл), а затем фильтрую полученный typescript
файл с помощью сценария sed. Смотрите, например, мой ответ в Можно ли программно "записать" управляющие коды ANSI в файл с помощью unix-утилит?, обсуждение script2log
.
Есть и другие примеры, например, упомянутые в комментариях. Однако упомянутые не рассматривают данный конкретный случай (когда возврат каретки используется для зачеркивания текста), а только удаления управляющих символов.