Использование чтения без запуска действия новой строки на терминале - PullRequest
10 голосов
/ 03 февраля 2012

У меня сейчас есть

$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"]
>

Любая помощь будет оценена.

1 Ответ

11 голосов
/ 04 февраля 2012

Ввод , который вызывает возврат read, обязательно перемещает курсор на следующую строку.Вам нужно использовать экранирование терминала, чтобы вернуть его на предыдущую строку.И остальная часть вашего сценария имеет некоторые проблемы в любом случае.Вот что работает, это должно дать вам лучшую отправную точку:

#!/bin/bash -e

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

\033 - это Esc ;\033[1A перемещает курсор на предыдущую строку, \033[2K стирает все, что было на ней.

...