Крон выключает раскраску дерева

Я сделал скрипт bash, который может tree рекурсивная целая структура каталогов, помещающая в каждый каталог файл HTML, сгенерированный aha, Скрипт считывает список каталогов, подлежащих индексации. find искать каждый каталог внутри каталога и генерировать полный список каталогов. Если каталог /media/veracrypt1 содержит 50 каталогов в иерархической структуре, tree создает дерево всего в заданном каталоге и "ниже", записывает HTML-файл с записанной древовидной структурой внутри каталога, затем идет вниз, повторяет действие вниз.

Я хотел бы, чтобы сценарий был запущен в определенное время cron, Сценарий работает, но раскраска - нет, а вывод канала черный на белый. Я считаю, что это результат cron не имея доступа к LS_COLOR системная переменная. (Это то, что я подозреваю)

Как исправить скрипт, чтобы он давал желаемый эффект?

Жизненно важный фрагмент сценария:

tree -axC "$file" | aha --title $(basename "${file// /_}") > "$file"/[z9][tree]_$(basename "${file// /_}").html; done

Работает также без aha:

tree -axC "$file" > "$file"/[z9][tree]_$(basename "${file// /_}").html; done

но та же проблема с раскрашиванием (только в cron) сохраняется.

Текст полного сценария:

#!/bin/bash



  List_make_R_general=/track/to/location_1.txt
   List_R_gen_general=/track/to/location_2.txt
             cron_log=/track/to/location_3.txt





echo > $cron_log
cat "$List_make_R_general" | while read file; do find "$file" -type d; done | tee "$List_R_gen_general"
 cat "$List_R_gen_general" | while read file; do tree -axC "$file" | aha --title $(basename "${file// /_}") > "$file"/[z9][tree]_$(basename "${file// /_}").html; done
 cat "$List_R_gen_general" | while read file; do tree -axC "$file" -I "*.JPG" | aha --title $(basename "${file// /_}") > "$file"/[z9][tree]_$(basename "${file// /_}")_[excl].html; done
echo -e "Tree done successfully: $(date) \n" >> $cron_log
exit

1 ответ

Решение

Я работал над аналогичной проблемой с htop В последнее время вам нужно установить TERM=xterm в вашем скрипте:

#!/bin/bash
export TERM=xterm
…

Вместо того, чтобы использовать export Вы также можете установить переменную для каждого tree вызов напрямую:

…; do TERM=xterm tree -axC …

TERM переменная говорит tree какой тип терминала вы используете. Что, вероятно, имеет значение 1 в этом случае, так это способность текстового окна отображать цвет: xterm построен с 8 цветами в то время как, например, xterm-256color - как вы уже догадались - построен с 256 цветами. Вы можете получить список возможных значений для вашей системы с ls -1 /lib/terminfo/x и просматривать и сравнивать их возможности с infocmp например,

infocmp xterm                              # view capabilities
infocmp xterm xterm-256color               # compare
infocmp xterm xterm-256color | grep colors # compare only colors

1 Как отмечено в комментариях tree на самом деле просто тесты для TERM быть настроенным на что-либо вообще, так TERM=my_precious tree работает так же. Хотя придание ему действительного значения кажется хорошей идеей.

Дальнейшее чтение:

Другие вопросы по тегам