2012-02-03 9 views
8

Actualmente tengo esteutilizando la lectura sin desencadenar una acción de salto de línea en el terminal

$PROMPT=">" 
while read -p "${PROMPT}" line; do 
    echo -en "\r" 
    some_info_printout($line) 
    echo -en "\n${PROMPT}" 
done 

que da salida como esta

>typed input 
INFO OUT ["typed input"] 
>more text 
INFO OUT ["more text"] 
> 

lo que me gustaría es hacer un read e ignorar la acción de nueva línea, tales ese texto de precierre puede sobreescribir la línea existente

INFO OUT ["typed input"] 
INFO OUT ["more text"] 
> 

Cualquier ayuda sería apreciado.

+0

'-s' sería exagerado ya que el programa sería difícil de escribir correctamente en –

Respuesta

10

Ingrese que hace que read devuelva necesariamente mueve el cursor a la siguiente línea. Necesita usar escapes de terminal para volver a la línea anterior. Y el resto de la secuencia de comandos tiene algunos problemas de todos modos. Aquí hay algo que funciona, debe darle un mejor punto de partida:

#!/bin/bash -e 

PROMPT=">" 
while read -p "${PROMPT}" line; do 
     echo -en "\033[1A\033[2K" 
     echo "You typed: $line" 
done 

\033 es un Esc; el \033[1A mueve el cursor a la línea anterior, \033[2K borra lo que haya en él.

+3

FWIW, el eco de bash también reconoce la secuencia de escape' \ e' para escapes. – FatalError

Cuestiones relacionadas