Если я работаю echo -e "\e[1;31mThis is red text\e[0m"
в строке команды Это распечатывает красный текст.
Однако, если я использую, пишут это в файле сценария test.sh
#! /bin/bash
echo -e "\e[1;31mThis is red text\e[0m"
выполненный $ sh test.sh
Это распечатывает -e \e[1;31mThis is red text\e[0m
Почему они действуют differntly?
echo
оболочка, встроенная в Bash и тире (/bin/sh
). Если Вы работаете echo
из командной строки Вы используете встроенный Bash при выполнении сценария оболочки с sh
Вы используете встроенного Тире.
Версия тире echo
не знает -e
опция, но просто производит что-либо дословно без любой специальной обработки для \
последовательности.
Или используйте Bash для выполнения сценария оболочки или использования /bin/echo
вместо echo
:
/bin/echo -e "\e[1;31mThis is red text\e[0m"
Избегать проблем с различными версиями echo
можно хотеть использовать printf
вместо этого. В отличие от echo
printf
всегда интерпретирует \
последовательности, но автоматически не добавляют перевод строки в конце, таким образом, необходимо добавить \n
в конце, если Вы хотите тот.
Как некоторые версии printf
не понимать \e
необходимо использовать \033
вместо этого:
printf "\033[1;31mThis is red text\033[0m\n"
Не выполняйте его с sh test.sh
, это печатает текст в белом цвете как Вы, сказал.. После создания сценария сделайте его исполняемым файлом путем выполнения,
sudo chmod +x /path/test.sh
Выполнение, сценарий с sudo
, как sudo ./test.sh
или ./test.sh
оба будет работы.
Или
Выполнение сценарий с bash
,
bash /path/test.sh
Этому нужна корректная команда в правильном формате, все.
Надлежащий оператор эха: echo "Hello World!"
Надлежащий оператор эха с цветом: echo "\e[1;31mHello World!\e[0m"
Добавление цвета к сценарию удара является одной из тех очень простых, но легко запутывающих вещей.=)
Этот сайт мог помочь объяснить все это ясно Вам. Я часто использую его в качестве ссылки, потому что, кто может помнить все корректное право цветовых кодов? LOL