Skip to content

optimize: tput civis/cnorm без проверки TTY — escape-коды в логах при запуске под nohup / в файл #28

Closed

Description

@jestivald

Что происходит

optimize.sh пишет управляющие последовательности курсора в stdout независимо от того, терминал это или файл. При штатном для долгих прогонов запуске под nohup … > log (или через curl | bash с перенаправлением в лог) в логе появляется мусор:

[?12l[?25h[+] CLI: na-diagnose, na-report (read-only, в /usr/local/sbin) → для мониторинга/панели

(на всех 8 хостах при раскатке v4.0.1 01.09.2026; TERM=xterm, stdout — файл).

Корень

scripts/optimize.sh: спиннер tput civis (:193) и tput cnorm (:214, :217), плюс trap 'tput cnorm …' EXIT/INT (:27–28). tput смотрит на TERM, а не на isatty(1), поэтому при непустом TERM пишет escape-коды и в файл. Функционально безвредно, но ломает grep/парсинг логов раскатки и выглядит как повреждённый вывод.

Предлагаемый фикс

Гейтить всё «курсорное» проверкой терминала, например хелпером в lib/common.sh:

_tty_tput() { [[ -t 1 ]] && tput "$@" 2>/dev/null || true; }

и использовать его в спиннере и трапах (printf "\r\033[K" — туда же). Спиннер при ! -t 1 вообще не нужен — достаточно строки-заголовка шага.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions