【问题标题】:linux printf to specified terminal linelinux printf到指定的终端行
【发布时间】:2020-04-29 14:20:06
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: linux terminal


    【解决方案1】:

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

    【讨论】:

    • 您的解决方案确实是一个一个输出,而不是并发的:(在我尝试之后
    猜你喜欢
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2016-01-09
    • 2012-01-30
    • 2016-07-14
    相关资源
    最近更新 更多