2012-02-03 12 views
8

Attualmente ho questoUtilizzare read senza innescare un'azione fine riga sul morsetto

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

che un output come questo

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

quanto desidero è fare un read e ignorare l'azione newline tale quel testo precendente può sovrascrivere la linea esistente

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

Qualsiasi aiuto sarebbe apprezzato.

+0

'-s' sarebbe esagerato poiché il programma sarebbe difficile da digitare correttamente in –

risposta

10

Immettere che causa read per tornare necessariamente sposta il cursore sulla riga successiva. È necessario utilizzare gli escape del terminale per tornare alla riga precedente. E il resto del tuo script ha comunque qualche problema. Ecco qualcosa che funziona, dovrebbe dare un punto di partenza:

#!/bin/bash -e 

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

\033 è un Esc; il \033[1A sposta il cursore sulla riga precedente, \033[2K cancella tutto ciò che si trovava sopra.

+3

FWIW, l'eco di bash riconosce anche la sequenza di escape' \ e' per gli escape. – FatalError

Problemi correlati