Крон выключает раскраску дерева
Я сделал скрипт 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 работает так же. Хотя придание ему действительного значения кажется хорошей идеей.
Дальнейшее чтение:
man infocmpа такжеman 5 terminfo- GNU gettext manual - переменная окружения TERM
- Переменная окружения TERM сообщает программам, какой тип терминала вы используете