새로 설치된 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
이 리눅스 박스는 왜 나를 싫어하는 걸까요? ? ?
답변1
이것은 명령의 출력입니다 clear
...
당신은 도망갔습니다 clear
. clear
이러한 제어 시퀀스를 생성합니다. (내 컴퓨터에서는 순서가 다릅니다.)
% 클리어|cat -v;echo ^[[2J^[[H^[[3J %
ECMA-48 터미널 또는 터미널 에뮬레이터에서 이러한 제어 시퀀스는 디스플레이를 지우고 커서 위치를 지정합니다.
% 클리어 | 콘솔 디코드 ECMA48 ED 2 컵 0 ED 3 %
그러나 이 watch
명령은 실행되는 프로세스의 표준 출력을 해석하며 하나만 제외하고 ECMA-48 제어 시퀀스를 이해하지 못합니다. 1968년의 일부 TTY-37 제어 문자와 ( -c
이 플래그가 사용되는 경우) ECMA-48의 SGR 제어 시퀀스만 이해합니다.
ncurses에 전달되는 모든 항목은 캐럿 표기법으로 제어 문자를 인쇄합니다. 하지만실수 때문에watch
이면 캐럿 문자열의 두 번째 문자가 즉시 덮어쓰여지고 표시되어야 하는 내용은 in 의 출력 ^[[
과 동일합니다 .^[
watch
...그리고 clear
주문만 합니다.
쉘 스크립트는 전혀 인용되지 않습니다.
watch -n 10 지우기 > /dev/pts/0; netstat -tupn 2>/dev/null | netstat -tupn 2>/dev/null | grep -v 3306 > /dev/pts/0
따라서 두 가지 순차적 파이프라인은 다음과 같습니다.
시계 -n 10 지우기 > /dev/pts/0 netstat -tupn 2>/dev/null | netstat -tupn 2>/dev/null | grep -v 3306 > /dev/pts/0
리디렉션은 명령이 실행되기 전에 발생하며, 두 경우 모두 표준 출력을 열리는 의사 터미널로 리디렉션합니다.그래도. 사실상 no-ops입니다.
시계 -n 10 지우기 netstat -tupn 2>/dev/null | netstat -tupn 2>/dev/null | grep -v 3306
귀하의 기계는 귀하가 지시한 대로 정확하게 작동하고 있습니다.
따라서 명령의 출력을 계속해서 보고 있으며 clear
해당 출력은 제어 시퀀스로 처리되지 않고 깨진 캐럿 표기법으로만 인쇄됩니다.
명령을 한 번 watch
실행하려면 종료하세요 . netstat
☺