2011-04-19 12 views
14

¿Es posible hacer eco de un retroceso en bash?Haciendo eco de un retroceso

Algo así como

echo $'stack\b' 

En caso de que no se emiten stac? ¿O me estoy perdiendo algo?

Más específicamente, me gustaría utilizar eso en:

ls | wc -l; echo $'\b items' 

Respuesta

25

\b hace que el cursor se mueva a la izquierda, pero no borra el carácter. Imprime un espacio si quieres borrarlo.

Para algunas distribuciones, es también posible que necesite usar -e interruptor de echo:

-e  enable interpretation of backslash escapes 

lo que se verá como

echo -e 'stack\b ' 

Además, files=(*) ; echo "${#files[@]} items".

+0

Hmm, y por supuesto no es posible retroceder en una nueva línea, ¿verdad? Es por eso que mi solución inicial no funcionó (supongo). Gracias por la buena solución para el conteo de archivos. Daría +2 si pudiera :-) – sidyll

+0

¿Por qué este método de eliminación no funciona para las nuevas líneas? – Geremia

+0

'\ b' se remonta a un solo carácter, hasta el borde izquierdo de la terminal. Una nueva línea es, literalmente, una * nueva línea *, por lo que la segunda línea tiene su propio borde izquierdo. –

1

no es exactamente lo que estás pidiendo, sino también, en la línea de la respuesta de Ignacio, se puede usar para este caso:

echo "$(ls | wc -l) items" 

yo sepa no se puede imprimir un carácter que elimina la anterior , ni siquiera imprimiendo el carácter cuyo número de hexadecimanl corresponde al retroceso. Sin embargo, puedes retroceder e imprimir un espacio en blanco para eliminar. Con cput puede hacer muchas cosas e imprimir donde desee en la pantalla.

2

Así que para responder a la pregunta real acerca de las teclas de retroceso Esto simulará un retroceso:

echo -e "\b \b" 

Se moverá el carácter de vuelta, entonces eco de un espacio sobreescritura cualquier carácter que estaba allí, a continuación, pasar de nuevo - en efecto, borrando el caracter anterior. No volverá a subir una línea, por lo que la salida anterior no debería crear una nueva línea:

echo -n "blahh"; echo -e "\b \b"