gpt4 book ai didi

linux - BASH Shell 交互式 session - 如何修复 ASCII 艺术动画输出?

转载 作者:行者123 更新时间:2023-12-03 09:49:53 32 4
gpt4 key购买 nike

我正在尝试为以下 ASCII 艺术设置动画。 (我现在有两个文件,以后可能会添加更多文件以获得更精细的动画。)

$ cat ~/aks1.txt
\ RTX /
\ /
\ WAZUH LAB /
] [ ,'|
] [ / |
]___ ___[ ,' |
] ]\ /[ [ |: |
] ] \ / [ [ |: |
] ] ] [ [ [ |: |
] ] ]__ __[ [ [ |: |
] ] ] ]\ _ /[ [ [ [ |: |
] ] ] ] (A) [ [ [ [ :===='
] ] ]_].nRn.[_[ [ [
] ] ] HHUHH. [ [ [
] ] / `HN("N \ [ [
]__]/ HNH " \[__[
] NNN [
] / N/" \ [
] / N H \ [
/ N \
/ q, \
/ \

$ cat ~/aks2.txt
\ RTX /
\ /
\ WAZUH LAB /
] [ ,'|
] [ / |
]___ ___[ ,' |
] ]\ /[ [ |: |
] ] \ / [ [ |: |
] ] ] [ [ [ |: |
] ] ]__ __[ [ [ |: |
] ] ] ]\ _ /[ [ [ [ |: |
] ] ] ] (A) [ [ [ [ :===='
] ] ]_].nRn.[_[ [ [
] ] ] .HHUHH [ [ [
] ] / #")NH` \ [ [
]__]/ " HNH \[__[
] NNN [
] / "\N [
] H N \ [
/ / N \ \
/ / ,p \ \
/ \

到目前为止,这是我的代码:

if [[ -t 0 ]]; then
old_tty=$(stty --save)
stty raw -echo min 0
fi
while IFS= read -r REPLY; [[ -z "$REPLY" ]]; do
clear
cat ~/aks1.txt
usleep 500000
clear
cat ~/aks2.txt
((c++)) && usleep 500000
done
if [[ -t 0 ]]; then
stty "$old_tty"
fi
echo

优点:
  • 简单的方法/解决方案
  • 不需要复杂的变量替换(在 tput 杯屏幕位置)
  • 在按下 ANY 键之前效果很好,因此运行动画的生命周期不需要硬编码的 COUNTER 变量。
  • 动画是一种工作(动画正在发生,但输出渲染不完美)。

  • 缺点:
  • 动画输出为乱码/垃圾。

  • 如何修复输出?

    最佳答案

    当您切换到原始模式换行符 ( \n ) 时,不再将光标移回第一列。他们只将它向下移动。您必须打印回车符 ( \r ) 以重置列。

    您可以通过使用 sed 禁用将它们添加到每一行的末尾来做到这一点:

    sed 's/$/\r/g' ~/aks1.txt

    或者,您可以跳过切换到原始模式并将终端保留在默认状态。防止 read来自阻止使用的命令 read -t 0添加 0 秒超时。如果用户没有按下任何键,它会立即返回而不是等待他们按下某些东西。
    until read -t 0; do
    ...
    done

    关于linux - BASH Shell 交互式 session - 如何修复 ASCII 艺术动画输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61239780/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com