首页 > 解决方案 > linux printf到指定的终端行

问题描述

yocto中,当我使用bibake构建一个 recipe 时,与这个 recipe 相关的阶段会打印成多行,非常漂亮。所以我想实现一个像它这样的小例子。

  1. 获取当前光标所在
  2. 运行 2 个线程,一个在row + 1输出一些东西,另一个在row + 2输出一些东西

结果,我失败了。然后我运行 2 个执行相同操作的进程,再次失败。

有人可以给我一些建议吗?我想要的是这样的:

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

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

标签: linuxterminal

解决方案


在 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"

推荐阅读