Команда Echo с опцией цвета в скрипте и команда работают по-разному

15

Если я бегу 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

Почему они действуют по-разному?

Цинфэн
источник

Ответы:

29

echoэто оболочка, встроенная в Bash и dash ( /bin/sh). Если вы запускаете echoиз командной строки, вы используете встроенную Bash, если вы запускаете свой скрипт оболочки, shвы используете встроенную Dash.

Dash-версия 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"
Флориан Диш
источник
Оно работает. /bin/echoс тире ( /bin/sh) и bash; echoс Bash или ./tes.shоба работает правильно. Код ниже работает bashтолько с. if [$ UID -ne 0]; затем echo "Не пользователь root", а echo "Root User" fi
qingfeng
1

Не запускайте его sh test.sh, он печатает текст белым цветом, как вы сказали ... После создания скрипта сделайте его исполняемым, запустив,

sudo chmod +x /path/test.sh

введите описание изображения здесь

Запустите скрипт с помощью sudo, какsudo ./test.sh или ./test.shоба будут работать.

Или

Запуск сценария с bash,

bash /path/test.sh
Авинаш Радж
источник
Я бегу chmod a+x test.sh, он печатает текст в цвете чтения. В чем разница. ./test.shдолжно быть равным sh test.shЧто случилось в Linux?
Цинфэн
вам не приходилось использовать sh при запуске скрипта, вы создали скрипт с интерпретатором bash, #! /bin/bashпоэтому вам нужно его использоватьbash test.sh
Avinash Raj
А также .означает текущий каталог.
Авинаш Радж
Смотрите на скриншот, мой файл test.sh находится внутри рабочего стола. Так что я переместился в эту папку рабочего стола и затем я запустил ./test.sh, наконец, это работает. Пожалуйста, имейте в виду, что запускать скрипт .нужно только в том случае, если он был представлен в текущем каталоге.
Авинаш Радж
1

Для этого нужна правильная команда в правильном формате - все.

Правильное эхо-утверждение: echo "Hello World!"

Правильное эхо-выражение с цветом: echo "\e[1;31mHello World!\e[0m"

Добавление цвета в скрипт bash - одна из тех очень простых, но легко запутывающих вещей. знак равно

Этот сайт может помочь вам все это объяснить. Я часто использую это как ссылку, потому что, кто может помнить все правильные цветовые коды правильно? лол

hwac121
источник