linux printf к указанной терминальной линии - PullRequest
1 голос
/ 29 апреля 2020

В yocto , когда я использую bibake для создания одного рецепта, этапы, связанные с этим рецептом, будут напечатаны в несколько строк, очень красиво. Поэтому я хочу реализовать крошечный пример, подобный этому.

  1. получить текущий курсор row
  2. запустить 2 потока, один выводит что-то в row + 1 , другой выводит что-то на строку + 2

В результате я потерпел неудачу. Затем я запускаю 2 процесса, которые делают то же самое, снова не удалось.

Может кто-нибудь дать мне несколько советов? То, что я хочу, это как:

ts:/home/test$ ./program1 &; ./program1 &

program1's output.....................
program2's output.....................

1 Ответ

0 голосов
/ 29 апреля 2020

В Bash:

#!/usr/bin/env bash

printf '\n\n'

echo -ne "\033[6n"
read -rs -d\[ _
read -rs -dR foo
cursor_pos=$(cut -d";" -f1 <<< "$foo")
upper_row=$((cursor_pos - 2))
lower_row=$((cursor_pos - 1))

echo -ne  "\033[${upper_row};0H"
echo upper row
sleep 2
echo -ne  "\033[${lower_row};0H"
echo lower low
sleep 2
echo -ne  "\033[${upper_row};0H"
printf "\r\e[0K%s\n"  "upper again"
sleep 2
echo -ne  "\033[${lower_row};0H"
printf "\r\e[0K%s\n"  "lower again"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...