Крон выключает раскраску дерева
Я сделал скрипт 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 сообщает программам, какой тип терминала вы используете