GNU bash,版本4.2.46(2)-发行版(x86_64-redhat-linux-gnu)
RH 7.8(Maipo)
我有一个要在以下条件下运行的ASCII图表:
动画区域仅用于左/右臂和腿部。
我具有以下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 / \
我试图弄清楚该怎么做?`实施后,我希望这样的屏幕行为:
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艺术/文本)
解决方法:代替使用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,$提示就会返回给用户。专业人士:
缺点:
解决方案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;'
专业人士:
缺点:
PS:在BASH 4.4+中,我们可以使用“ echo $ {PS1 @ P}”,但我倾向于将PS1值放入〜/ aks1.txt和〜/ aks2.txt中。这样,屏幕将呈现流畅的动画;如果使用echo代替,当echo打印PS1值时,它将在屏幕上显示一些斑点。