Используя LinuxMint 17.2, ядро 4.4.0-97-generic. Я сделал небольшой скрипт TestEcho.sh, который содержит:
#!/bin/bash
echo -e "\e[1;31m Text in Color \e[0m\n"
for code in {33..43}; do echo -e "\e[38;05;${code}m $code: Text in Color"; done ; echo "";
При выполнении команды echo -e
в командной строке она выдает ожидаемый результат, т. е. интерпретирует escape-код и отображает текст в цвете.
Та же команда в скрипте .sh, echo
похоже, игнорирует -e
опцию и отображает -e
как буквальный текст. Кроме того, цикл for, похоже, также сломан. Это вызвано echo -e
? И что еще важнее, как исправить скрипт?
ОТВЕЧАТЬ(спасибо Джорджу Василиу): Запустить скрипт bash
вместоsh
$ bash ~/Download/TestEcho.sh
решение1
bash и sh — это разные типы оболочек. bash — последняя и более умная, чем sh. В вашем скрипте вы пишете, #!/bin/bash
что это означает, что он будет работать с использованием bash
оболочки. Но если вы используете sh ~/Download/TestEcho.sh
, то он будет работать с использованием sh
оболочки.