Sé que podría eliminar los últimos tres caracteres con:
echo -ne '\b\b\b'
Pero, ¿cómo puedo eliminar una línea completa? Quiero decir que no quiero usar:
echo -ne '\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b'
... etc ... para eliminar una línea larga.
command-line
echo
LanceBaynes
fuente
fuente
echo -ne "\033[2K" ; printf "\r"
ahora la línea está como nueva, como si nunca antes se hubiera escrito.echo -ne "\e[2K\r"
. Pero las secuencias de escape ANSI FTW, sin embargo.Respuestas:
Puede usar
\b
o\r
para mover el cursor hacia atrás y luego sobrescribir el carácter impreso con un nuevo carácter. Tenga en cuenta que\b
ni\r
elimina los caracteres impresos. Simplemente mueve el cursor hacia atrás.\b
mueve el cursor un carácter hacia atrás y\r
mueve el cursor al comienzo de la línea.Ejemplo: ambos
y
imprimirá:
Si desea que se eliminen los caracteres, debe usar la siguiente solución:
salida:
Extracto de
man echo
:fuente
echo -e 'fooooooooo\rbar
resuena barooooooo.echo -e 'foooo\b\b\b\b\b\b\b\b\b\bbar'
también hace ecobaroo
.printf
.Estás buscando escapes de terminal . En particular, para borrar desde la posición del cursor hasta el comienzo de la línea:
O todo en la línea, independientemente de la posición del cursor:
Y también puedes hacer todo tipo de trucos geniales con salidas de terminal.
fuente
-e
comoecho
argumento no es compatible con POSIX + No me gustan las secuencias de escape. O prefieresprintf
otput
.-e
parámetroecho
no es compatible con POSIX pero aún así ...Si desea borrar la línea, le sugiero que use una combinación del retorno de carro que la gente menciona y terminfo.
Esto escribirá
xyzzyxyzzy
, luego volverá al comienzo de la línea y enviará la secuencia "borrar al final de la línea" al terminal, luego escribafoobar
. El-n
echo hace que no se agregue una nueva línea después delfoobar
.fuente
printf '%s\r%s%s' xyzzyxyzzy "$ceol" foobar
a portabilidad y para evitar tener el contenido de$ceol
pasar por la\x
expansión.Usted lo solicita explícitamente
echo
, pero esta solicitud lo inmoviliza. Aquí hay un enfoque que utiliza elprintf
comando incorporado de bash con expansión de llaves:fuente
Aquí hay un ejemplo usando las opciones de retorno de línea
-n
y retorno de carro sin echo\r
.fuente
En lugar de
echo -en "\r"
usted también puede encontrar elprintf "\r"
comando como útil. De esta manera puede formatear la cadena. p.ej:Por lo general, también lo hago cuando opero con un análisis lento de archivos para mostrar el nombre de archivo actualmente en progreso sin crear una lista
fuente
Como la pregunta es eliminar la línea completa
He usado el siguiente comando con la combinación de
echo
ysed
para eliminar la líneaDespués de la ejecución del comando, el resultado estará vacío, ya que la línea se reemplazará por ninguna.
mando
fuente
Aquí hay un ejemplo de temporizador de cuenta regresiva que uso:
fuente