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?

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"

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.