在bash中,当我在cat
文件上运行.zip
时,它会输出一堆符号,可以快速向上滚动屏幕。它也会发出一些哔哔声。这有点可怕和令人敬畏。
我继续这样做是否安全?我有点想把这个作为我的袖子,可以这么说。我想哇我的朋友,家人和未来的雇主;我知道这个技巧肯定会给人留下深刻的印象。
任何人都知道这样做是否有任何有害影响?
答案 0 :(得分:1)
这取决于你认为安全的。一些二进制序列正在改变终端的行为。例如,滚动窗口的大小,颜色,背景颜色,字符集等。它们可以将光标移动到其他地方,禁用回声或发出声音。但是,使用reset
命令可以轻松撤消所有这些效果。
某些序列可能会放置一些字符,就像按下某些键一样。例如,在screen
以下命令下运行:
printf "\033Z"
它会显示一些垃圾,然后在bash提示符后立即在输入上放置一串字符。对我来说,它看起来像:
arturcz@szczaw:/tmp$ printf "\033Z"
^[[?1;2carturcz@szczaw:/tmp$ 1;2c
如果按Enter
键,bash将尝试运行此命令:
^[[?1;2carturcz@szczaw:/tmp$ 1;2c
bash: 1: command not found
bash: 2c: command not found
arturcz@szczaw:/tmp$
我既没有1
也没有2c
命令。但如果你拥有它们,它们就会被运行。它可能很危险。风险不是很大,但你要小心。因此,如果您决定使用这些故障,请记住使用backspace
或ctrl-u
来清理输入行。
顺便说一句,你可以准备一个带有控制字符的文件来绘制一个有趣的动画。例如,将以下脚本保存到文件中,例如script.sh
:
#!/bin/bash
printf "\033[?25l"
printf "\033[H\033[2J";
for m in $(seq 1 100); do
echo $m >&2
for p in $(seq 20 -1 10); do
for r in $(seq 0 1000); do
printf "\033[${p};10H^o^"
done
printf "\033[${p};10H "
done
for p in $(seq 10 20); do
printf "\033[${p};10H^o^"
for r in $(seq 0 1000); do
printf "\033[${p};10H^o^"
done
printf "\033[${p};10H "
done
done
printf "\033[34h\033[?25h"
然后将其运行为:
bash script.sh > anim.txt
可能需要一些时间,但脚本显示了完成工作的百分比。正如您所看到的,anim.txt
的内容不是二进制,但是当您将其运行为:
screen cat anim.txt
你会看到一个简单的动画。屏幕命令是必需的,因为脚本使用屏幕终端控制字符。此外,通过使用屏幕,显示过程会稍微减慢,这对于现代计算机来说尤其重要,因为动画会显示得非常非常快。
如果您想了解有关这些控制序列的更多信息,请阅读terminfo(5)手册和NCURSES Programming HOWTO。