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