В вашем скрипте эти назначения
normal='\e[0m'
yellow='\e[33m'
помещают эти символы буквально в переменные, то есть \ e [ 0 m , а не escape-последовательность. Вы можете создать escape-символ, используя printf
(или некоторые версии echo
), например,
normal=$(printf '\033[0m')
yellow=$(printf '\033[33m')
, но гораздо лучше использовать tput
, поскольку это будет работать для любого правильно настроенного терминала:
normal=$(tput sgr0)
yellow=$(tput setaf 3)
Глядя на ваш пример, кажется, что используемая вами версия printf
рассматривает \ e
как escape-символ (который может работают в вашей системе, но обычно не переносятся на другие системы). Чтобы увидеть это, попробуйте
yellow='\e[33m'
printf 'Yellow:%s\n' $yellow
, и вы увидите буквальные символы:
Yellow:\e[33m
, а не escape-последовательность. Помещение их в формат printf
указывает printf
интерпретировать их (если может).
Дополнительные материалы для чтения:
Это зависит от того, какие функции вы хотите получить от рабочего стола или чего от него обычно ожидаете:
практически любая маленькая виртуальная машина без композитинга.
Новым на сцене является, например, LXQt, который пытается создать полностью функциональный легкий рабочий стол.