script español comando bash ubuntu centos echo sh

bash - español - echo>> linux



echo-e backslash escapes no se respetan en sh (2)

Tengo un script de shell que deseo ejecutar en diferentes servidores Linux. Cuando ejecuto el comando echo con la opción -e y los caracteres de escape en la cadena, no se ejecuta como se espera en sh shell en Ubuntu 12.04 o Ubuntu 11.04. Los dos servidores que tenemos en uso en los que me gustaría que funcione el script están ejecutando CentOS 5.3 y Ubuntu 12.04. Cuando ejecuto el siguiente comando en bash en los dos servidores, se produce el resultado esperado:

$ echo -e "line1/nline2" line1 line2

Cuando ejecuto el mismo comando en sh en la máquina CentOS, también se produce la salida correcta. Pero cuando ejecuto el comando en sh en Ubuntu 12.04 o 11.04, se produce la siguiente salida:

$ echo -e "line1/nline2" -e line1 line2

Es interesante si ejecuto el siguiente en sh en Ubuntu, automáticamente interpreta los caracteres de escape.

$ echo "line1/nline2" line1 line2

La secuencia de comandos debe ejecutarse en el sh shell y debe ser portátil en diferentes máquinas. Cualquier solución También agradecería un enlace a algunos documentos explicando por qué o cómo sucede esto.


echo es irremediablemente inconsistente entre implementaciones; si necesita un comportamiento consistente para aplicaciones no triviales (por ejemplo, secuencias de escape), utilice printf lugar (y recuerde agregar una final / n explícitamente):

$ printf "line1/nline2/n" line1 line2


El sh shell en Ubuntu es dash . Su eco incorporado no tiene una opción -e (y por lo tanto simplemente lo repite, como viste), o, mejor dicho, no tiene una forma de desactivar el comportamiento de escape.

Use /bin/echo lugar.

Para verificar qué shell estás usando prueba echo $SHELL

$ echo $SHELL /bin/bash