Acabo de notar que parece que la bandera -e
no existe para el echo
comando en mi shell en Linux. ¿Es solo una configuración desordenada o es "normal"?
Algún código como ejemplo:
#!/bin/sh
echo -e "\e[3;12r\e[3H"
Huellas dactilares:
-e \e[3;12r\e[3H
Esto funcionó antes! Supongo que algunos stty
comandos salieron terriblemente mal y ahora ya no funciona. Alguien sugirió que mi sh
era realmente justo bash
.
shell
escape-characters
echo
BrainStone
fuente
fuente
echo
construcción del/bin/sh
shell que proporciona eldash
paquete en Debian (un sistema operativo que puede tener Linux o FreeBSD como núcleo).Respuestas:
Porque usaste
sh
, nobash
, entonces elecho
comandosh
no tiene opción-e
. Desde la página desh
manual:Y tampoco tiene
\e
:fuente
sh
Soporte de varias implementacionesecho -e
, en el momento de la compilaciónbash
se les puede decir que no lo admitanecho -e
. Es solo que ese sh particular (probablementedash
) no es compatible-e
mientras que esebash
sí lo hace.-e
no es POSIX (de hecho, POSIX echo generalmente no acepta opciones (aunque está permitido admitir-n
), ver aquí ), y/bin/sh
en su sistema parece ser un shell POSIX.-e
es una extensión aceptada en algunos shells, pero no debe confiar en ella, no es portátil. Idealmente, useprintf
o cambie a usar un shell que tieneecho -e
.También vea las advertencias de
\e
en los comentarios a continuación, que deben reemplazarse por\033
.fuente
sh
tampoco reconoce\e
. Uso\033
Tenga en cuenta que en cualquier momento y en casi cualquier shell, puede averiguar qué "eco" se llamará escribiendo
type echo
owhich echo
. Suele ser un caparazón incorporado. Por lo tanto, depende de qué "eco" esté instalado y de qué shell esté utilizando.fuente
which echo
no debe usarse, es probable que no le diga si está usando un incorporado porquewhich
generalmente es un binario externo.type
es bueno, sin embargo.type which
owhich which
). ;)