Как вы пишете через повторяющуюся строку? - PullRequest
1 голос
/ 08 сентября 2011

Я пытаюсь изменить текст отображаемой строки в Терминале, и \ r работает для меня, но не тогда, когда я помещаю его в файл .sh. Я хочу запустить файл .sh, чтобы изменить отображаемую строку с интервалом в 1 секунду (не спрашивайте, почему). Когда я делаю

echo -ne 'hello\r'
sleep 1
echo -ne 'bye\r'

выводит с

-ne hello
-ne bye

как мне достичь своей цели?

Ответы [ 2 ]

4 голосов
/ 08 сентября 2011

Движение курсора

Важные части:

- Position the Cursor:
  \033[<L>;<C>H
     Or
  \033[<L>;<C>f
  puts the cursor at line L and column C.
- Move the cursor up N lines:
  \033[<N>A
- Move the cursor down N lines:
  \033[<N>B
- Move the cursor forward N columns:
  \033[<N>C
- Move the cursor backward N columns:
  \033[<N>D

- Clear the screen, move to (0,0):
  \033[2J
- Erase to end of line:
  \033[K

- Save cursor position:
  \033[s
- Restore cursor position:
  \033[u

так что-то вроде:

echo -ne "\033[50D"
echo -ne "\033[K"
3 голосов
/ 08 сентября 2011

Используйте printf, который стандартизирован, а не -ne опции для echo, которые не являются.

printf '\033[K%s\r' "hello world"
sleep 1
printf '\033[K%s\r' "bye now"

Убедитесь, что вы печатаете новую строкупри выходе, например, с

trap 'echo' 0

перед первой из команд printf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...