我在全新安装的 Debian 系统上,通过 /dev/pts/0 上的 ssh 登录,并输入了以下命令
watch -n 10 clear > /dev/pts/0 ; netstat -tupn 2>/dev/null | grep -v 3306 > /dev/pts/0
我得到的看起来像这样
Every 10.0s: clear Thu Jan 30 17:42:01 2020
^[3;J^[H^[2J
为什么这个linux盒子讨厌我???
这是
clear
命令的输出……你跑了
clear
。clear
产生了这些控制序列。(它们只是在我的机器上以不同的顺序排列。)在 ECMA-48 终端或终端仿真器上,这些控制序列擦除显示并定位光标。
但是该
watch
命令解释它运行的进程的标准输出,并且除了一个之外不理解任何 ECMA-48 控制序列。它只理解 1968 年的一些 TTY-37 控制字符和(如果使用-c
标志)来自 ECMA-48 的 SGR 控制序列。它传递给 ncurses 的所有其他内容,以插入符号打印控制字符。但是由于 中的一个错误
watch
,插入符号字符串的第二个字符会立即被覆盖,并且应该在的输出中^[[
出现。^[
watch
……只有
clear
命令。根本没有引用 shell 脚本:
所以这是两个管道,依次:
重定向发生在命令运行之前,并且在两种情况下将标准输出重定向到它仍然打开的伪终端。它们实际上是无操作的:
您的机器正在按照您的要求执行操作。
因此,您正在
clear
反复观察命令的输出,其输出并未作为控制序列处理,而只是以损坏的插入符号表示。退出
watch
以运行您的netstat
命令一次。☺