El comando de eco con opción de color en el script y el comando funciona de manera diferente

15

Si corro echo -e "\e[1;31mThis is red text\e[0m"en línea de comando, imprime el texto rojo.

Sin embargo, si uso escribirlo en el archivo de script test.sh

#! /bin/bash
echo -e "\e[1;31mThis is red text\e[0m"

correr $ sh test.sh

Se imprime -e \e[1;31mThis is red text\e[0m

¿Por qué actúan de manera diferente?

qingfeng
fuente

Respuestas:

29

echoes un shell integrado en Bash y dash ( /bin/sh). Si se ejecuta echodesde la línea de comandos, está utilizando el Bash incorporado, si está ejecutando su script de shell con shel Dash incorporado.

La versión de guión de echono conoce la -eopción, pero solo muestra algo literalmente sin ningún manejo especial para las \secuencias.

Use Bash para ejecutar su script de shell o use en /bin/echolugar de echo:

/bin/echo -e "\e[1;31mThis is red text\e[0m"

Para evitar los problemas con diferentes versiones de echousted, puede utilizar printfen su lugar. En contraste, echo printfsiempre interpreta las \secuencias pero no agrega automáticamente un salto de línea al final, por lo que debe agregarlo \nal final si lo desea.

Como algunas versiones de printfNo entiendo \e, deberías usar \033en su lugar:

printf "\033[1;31mThis is red text\033[0m\n"
Florian Diesch
fuente
Funciona. /bin/echocon guión ( /bin/sh) y bash; echocon bash o ./tes.shambos funcionan correctamente. El siguiente código bashsolo funciona. si [$ UID -ne 0]; luego echo "Usuario no root" más echo "Usuario raíz" fi
qingfeng
1

No sh test.shlo ejecutes, imprime el texto en color blanco como dijiste ... Después de crear el script, hazlo ejecutable,

sudo chmod +x /path/test.sh

ingrese la descripción de la imagen aquí

Ejecute el script con sudo, like sudo ./test.sho ./test.shboth funcionará.

O

Ejecutar el script con bash,

bash /path/test.sh
Avinash Raj
fuente
Corro chmod a+x test.sh, imprime el texto en color de lectura. Cuál es la diferencia. ./test.shdebería ser igual a sh test.sh¿Qué pasó en Linux?
qingfeng
no tuvo que usar sh mientras ejecutaba el script, lo creó con el intérprete bash, #! /bin/bashpor lo que debe usarlobash test.sh
Avinash Raj el
Y también .significa directorio actual.
Avinash Raj
Vea la captura de pantalla, mi archivo test.sh se coloca dentro del escritorio, así que me mudé a esa carpeta de escritorio y luego ./test.shejecuté, finalmente funciona. Tenga en cuenta que ejecute el script .solo si se presentó dentro del directorio actual.
Avinash Raj
1

Esto necesita el comando correcto en el formato correcto es todo.

Declaración de eco adecuada: echo "Hello World!"

Declaración de eco adecuada con color: echo "\e[1;31mHello World!\e[0m"

Agregar color a un script bash es una de esas cosas muy simples pero fácilmente confusas. =)

Este sitio podría ayudarlo a explicarlo todo claramente. A menudo lo uso como referencia porque, ¿quién puede recordar todos los códigos de color correctos? Jajaja

hwac121
fuente