Tengo un script bash que tiene muchas echo
declaraciones y también alias echo
a echo -e
ambas en .bash_profile
y .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_aliases
en el script, no ayuda
Estoy ejecutando mi script como bash /scripts/scriptnm.sh
; si lo ejecuto ya . /scripts/scriptnm.sh
que obtengo el resultado deseado ...
echo
como quieres es una mala práctica en mi humilde opiniónRespuestas:
La historia mixta de
echo
significa que su operación predeterminada varía de shell a shell. POSIX especifica que el resultado deecho
está "definido por la implementación" si el primer argumento es-n
o 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
echo
comando integrado con laxpg_echo
opción del shell.Configúrelo en la parte superior de cualquier script bash para
echo
expandir automáticamente los escapes de barra invertida sin tener que agregar-e
a 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
printf
para 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