Команда 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вами, використовуючи вбудований тире.

Версія тире 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) і баш; echoз bash або ./tes.shобидва працюють правильно. Код нижче працює bashлише з. якщо [$ UID -ne 0]; потім echo "Not root user" else 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?
qingfeng

вам не довелося використовувати 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 - одна з таких дуже простих, але легко заплутаних речей. =)

Цей сайт може допомогти вам зрозуміти все це. Я часто використовую це як довідник, тому що хто може запам'ятати всі правильні кольори правильно? Лол

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.