Tengo un script bash que tiene muchas echodeclaraciones y también alias echoa echo -eambas en .bash_profiley .bashrc, por lo que las nuevas líneas se imprimen correctamente para una declaración como echo 'Hello\nWorld'la salida debería ser
Hello
World
pero el resultado que obtengo es
Hello\nWorld
Incluso intenté usarlo shopt -s expand_aliasesen el script, no ayuda
Estoy ejecutando mi script como bash /scripts/scriptnm.sh; si lo ejecuto ya . /scripts/scriptnm.shque obtengo el resultado deseado ...

echocomo quieres es una mala práctica en mi humilde opiniónRespuestas:
La historia mixta de
echosignifica que su operación predeterminada varía de shell a shell. POSIX especifica que el resultado deechoestá "definido por la implementación" si el primer argumento es-no si algún argumento contiene una barra diagonal inversa.Es más confiable de usar
printf(ya sea como un comando incorporado o un comando externo) donde el comportamiento está más bien definido: los escapes de barra invertida de estilo C y los especificadores de formato son compatibles con la cadena de formato (el primer argumento).Se puede controlar la expansión de la barra invertida secuencias de escape de fiesta ‘s
echocomando integrado con laxpg_echoopción del shell.Configúrelo en la parte superior de cualquier script bash para
echoexpandir automáticamente los escapes de barra invertida sin tener que agregar-ea cada comando echo.fuente
Cuando lo utiliza
bash myfile.sh, Bash se ejecuta en modo "por lotes", en un proceso separado , y no lee su perfil o archivo de registro.Cuando lo usa
. myfile.sh, el proceso de shell actual obtiene el archivo (como si su contenido hubiera sido escrito por usted), por lo tanto, ve sus alias definidos actualmente.En general, es una muy mala idea escribir scripts que dependen de una configuración de shell particular, especialmente alias, a menos que los defina en el script mismo. ( Nunca confíes en el usuario
.bashrc, incluso si es tuyo).fuente
La práctica recomendada es usar
printfpara todos los nuevos scripts.fuente
Esto funciona bien en la terminal
guardar en un archivo y hacerlo ejecutable (chmod + x)
ejecutar como ./your_file
fuente