BASH-ASCII艺术-如何动画-输入杯子/陷阱关键字或任何其他方式-运行动画,直到有人在$提示屏幕上按下键为止

问题描述 投票:0回答:1

GNU bash版本4.2.46(2)-发行版(x86_64-redhat-linux-gnu)

RH 7.8(Maipo)

我有一个要在以下条件下运行的ASCII图表:

  1. 当我登录(Linux)机器时,我希望ASCII文本显示在屏幕上。
  2. 我想给其中的人形动画UNTIL有人按下任何键(可能在用户进入$提示时),或者可以在向用户显示$提示之前。
  3. 我想(最初)想做动画只是人的形象。 我现在不担心为侧面/架子设置动画。

动画区域仅用于左/右臂和腿部。

我具有以下ASCII aks.txt文件。

$ cat -n aks.txt

 1          \            RTX            /
 2           \                         /
 3            \       WAZUH LAB       /
 4             ]                     [    ,'|
 5             ]                     [   /  |
 6             ]___               ___[ ,'   |
 7             ]  ]\             /[  [ |:   |
 8             ]  ] \           / [  [ |:   |
 9             ]  ]  ]         [  [  [ |:   |
10             ]  ]  ]__     __[  [  [ |:   |
11             ]  ]  ] ]\ _ /[ [  [  [ |:   |
12             ]  ]  ] ] (A) [ [  [  [ :===='
13             ]  ]  ]_].nRn.[_[  [  [
14             ]  ]  ]  HHUHH. [  [  [
15             ]  ] /   `HN("N  \ [  [
16             ]__]/     HNH  "  \[__[
17             ]         NNN         [
18             ]         N/"         [
19             ]         N H         [
20            /          N            \
21           /           q,            \
22          /                           \

我试图弄清楚该怎么做?`实施后,我希望这样的屏幕行为:

  1. [我看到一个带有$提示符的登录屏幕,它会自动清除/刷新并模仿人的身影,就像它走在中间一样。
  2. 我正在考虑一种方法:我只打印aks.txt文件内容,然后得到屏幕。然后在〜/ .bash_profile中,我将使用tput cup <x> <y>(其中X和Y是x轴/ y轴的维数)来回显给定的变量值。我可以在alias run_infi_until_a_key_is_pressed=$(...)或类似内容中运行包装器脚本,在该脚本中将运行无限循环,并使用tput cup命令将某些字符值放置在屏幕上给定位置的X,Y位置上的人类所有运动部位-身体。

我正在考虑的运动部件值/变量名称如下:这可以每1秒钟刷新一次[sleep 1),并使图形看起来更生动。

$CHEST = "HHUHH." or ".HHUHH"          (line# 14) --- values dependent per $counter (even/odd switch values)

$STOMACH = '`HN("N' or 'N")NH`'        (line# 15)

$WAIST = '   HNH  "' or '" HNH     '   (line# 16)

$ABOVEKNEE = 'N/"' or '"\N'            (line# 18)

$KNEE = 'N H' or 'H N'                 (line# 19)

$BELOWKNEE = 'N  ' or '  N'            (line# 20)

$FOOT = 'q, ' or ' ,p'                 (line# 21)

想知道是否有任何简单的方法可以做到,因为这似乎有点复杂。

参考:https://www.ascii-art-generator.org/(上传您的图片,生成ascii艺术/文本)

bash authentication ascii banner ascii-art
1个回答
0
投票

解决方法:代替使用tput cup <X> <Y>并在屏幕上给定的X / Y位置打印/回显变量值,我只是采用了不同的方法用于显示ASCII ART(类似于像motd)动画使用2个单独的文件。

PS:可以使用/创建2个以上的文件来获得更精细的动画。

文件〜/ aks1.txt(内容)$ cat〜/ aks1.txt

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

[giga-user@ip-10-20-33-444 ~]$

文件〜/ aks2.txt(内容)$ cat〜/ aks2.txt

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

[giga-user@ip-10-20-33-444 ~]$

解决方案1

动画(具有设置的计数器/时间,用于ASCII艺术动画的寿命)]] >>$ alias aa='c=0; while [[ $c -lt 5 ]]; do clear && cat ~/aks1.txt && usleep 500000 && clear && cat ~/aks2.txt && ((c++)) && usleep 500000; done; echo;'
此解决方案会工作几秒钟,一旦计数器超过5,$提示就会返回给用户。 

专业人士:

    简单方法/解决方案
  • 不需要复杂变量替换(在杯子杯屏幕位置)
  • 实现动画。
  • 缺点:

    1. 仍然缺乏用户按下“ ANY KEY”后立即停止动画的能力。
  • 仍然需要一个计数器来保存动画的生命。
  • 解决方案2:动画(不需要设置计数器/时间限制,但是需要修复我正在cat ing的文件的乱码输出)

    alias aa='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;'

    专业人士:

      简单方法/解决方案
  • 不需要复杂变量替换(在杯子杯屏幕位置)
  • 工作良好,直到按下ANY键,因此不需要使用硬编码的COUNTER变量来运行动画的寿命。
  • 动画是一种有效的(动画正在发生,但不能像解决方案1那样完美地呈现)
  • 缺点:

    1. 动画输出为GARBLED / SHITTY。我们如何在WHILE循环中解决此问题?否则,如果在解决方案2中没有这个单一的“骗局”,那么此解决方案将是该帖子的可接受答案。
  • [如果有人有解决此问题的想法,那就太好了!到目前为止,这是我的尝试。
  • PS:在BASH 4.4+中,我们可以使用“ echo $ {PS1 @ P}”,但我倾向于将PS1值放入〜/ aks1.txt和〜/ aks2.txt中。这样,屏幕将呈现流畅的动画;如果使用echo代替,当echo打印PS1值时,它将在屏幕上显示一些斑点。

    © www.soinside.com 2019 - 2024. All rights reserved.