2012-02-03 28 views
8

触发新行的动作我现在有这个使用读不上终端

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

这使输出这样

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

我想的是做一个read,并忽略换行符等动作精确的文本可以覆盖现有的行

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

任何帮助将赞赏。

+0

'-s'会超过上限,因为程序难以正确输入到 – 2012-02-03 20:03:58

回答

10

输入导致read返回必然将光标移动到下一行。您需要使用终端转义将其返回到上一行。 而你的脚本的其余部分无论如何都有一些问题。这里的一些作品,它应该给你一个更好的起点:

#!/bin/bash -e 

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

\033Esc键; \033[1A将光标移动到上一行,\033[2K将擦除其上的任何内容。

+3

FWIW中,bash的回显也能识别转义序列'\ e'。 – FatalError 2012-02-03 20:40:16