这是命令的输出clear...

这是命令的输出clear...

我在全新安装的 Debian 系统上,通过 ssh 登录 /dev/pts/0,并输入以下命令

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 盒子讨厌我???

答案1

这是命令的输出clear...

你跑了clearclear产生这些控制序列。 (它们只是在我的机器上的顺序不同。)

% 清除 |猫 -v ;回声
^[[2J^[[H^[[3J
%

在 ECMA-48 终端或终端仿真器上,这些控制序列会擦除显示并定位光标。

% 清除 |控制台解码 ECMA48
ED 2
杯0
ED 3
%

但该watch命令解释其运行的进程的标准输出,并且不理解除一个之外的任何 ECMA-48 控制序列。它仅理解 1968 年的一些 TTY-37 控制字符和(如果-c使用该标志)ECMA-48 的 SGR 控制序列。

它传递给 ncurses 的其他所有内容,它以插入符号表示法打印控制字符。但因为一个错误watch,然后立即覆盖插入记号字符串的第二个字符,并且本应出现的内容^[[^[inwatch的输出相同。

......并且只有clear命令。

shell脚本根本没有被引用:

watch -n 10 清除 > /dev/pts/0 ; netstat -tupn 2>/dev/null | netstat -tupn 2>/dev/null | grep -v 3306 > /dev/pts/0

所以这是两个顺序的管道:

watch -n 10 清除 > /dev/pts/0
netstat -tupn 2>/dev/null | netstat -tupn 2>/dev/null | grep -v 3306 > /dev/pts/0

重定向发生在命令运行之前,在两种情况下将标准输出重定向到它打开的伪终端反正。它们实际上是无操作的:

观看-n 10 清除
netstat -tupn 2>/dev/null | netstat -tupn 2>/dev/null | grep -v 3306

您的机器正在完全按照您的指示进行操作。

因此,您只是重复地观看命令的输出clear,其输出不会被处理为控制序列,而只是以损坏的插入符号表示法打印。

退出watch以运行netstat命令一次。 ☺

相关内容