Linux
這是什麼:^[3;J^[H^[2J?
我在全新安裝的 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
產生了這些控制序列。(它們只是在我的機器上以不同的順序排列。)% 清除 | 貓-v;迴聲 ^[[2J^[[H^[[3J.] %
在 ECMA-48 終端或終端仿真器上,這些控制序列擦除顯示並定位游標。
% 清除 | 控制台解碼 ecma48 編 2 杯 0 編 3 %
但是該
watch
命令解釋它執行的程序的標準輸出,並且除了一個之外不理解任何 ECMA-48 控制序列。它只理解 1968 年的一些 TTY-37 控製字元和(如果使用-c
標誌)來自 ECMA-48 的 SGR 控制序列。它傳遞給 ncurses 的所有其他內容,以插入符號列印控製字元。但是由於 中的一個錯誤
watch
,插入符號字元串的第二個字元會立即被覆蓋,並且應該在的輸出中^[[
出現。^[``watch
……只有
clear
命令。根本沒有引用 shell 腳本:
觀看 -n 10 清除 > /dev/pts/0 ;netstat -tupn 2>/dev/null | grep -v 3306 > /dev/pts/0
所以這是兩個管道,依次:
watch -n 10 清除 > /dev/pts/0 netstat -tupn 2>/dev/null | grep -v 3306 > /dev/pts/0
重定向發生在命令執行之前,並且在兩種情況下將標準輸出重定向到它仍然打開的偽終端。它們實際上是無操作的:
觀看 -n 10 清除 netstat -tupn 2>/dev/null | grep -v 3306
你的機器正在做你告訴它做的事情。
因此,您正在
clear
反復觀察命令的輸出,其輸出並未作為控制序列處理,而只是以損壞的插入符號表示。退出
watch
以執行您的netstat
命令一次。☺