![차이점을 강조하기 위해 "watch -d"와 유사한 Linux 명령의 색상 출력이 있습니까?](https://linux55.com/image/82944/%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%84%20%EA%B0%95%EC%A1%B0%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%22watch%20-d%22%EC%99%80%20%EC%9C%A0%EC%82%AC%ED%95%9C%20Linux%20%EB%AA%85%EB%A0%B9%EC%9D%98%20%EC%83%89%EC%83%81%20%EC%B6%9C%EB%A0%A5%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
저는 쉘 스크립팅 등의 시작 단계에 있으며 watch 명령의 -d 옵션과 유사하게 명령의 반복 출력을 색상화하는 올바른 방법을 찾는 데 몇 가지 어려움을 겪고 있습니다.
lsof 및 기타 명령에 대한 변경 사항을 보고 싶습니다. 즉, 변경된/새 줄만 빨간색으로 강조 표시되기를 원합니다(흰색 배경으로 강조 표시하고 다음 줄을 모두 강조 표시하는 대신). diff나 다른 명령을 사용하여 이를 수행하는 우아한 방법이 있습니까?
예: 빨간색 선은 SSH를 통한 새 연결을 표시합니다.
(여기서 GREP을 사용하여 ESTABLISHED를 찾을 수 있지만, 내가 보고 싶은 모든 명령이 검색할 키워드를 제공하는 것은 아닙니다. 따라서 출력에서 새/변경된 줄을 찾아야 합니다.)
답변1
마침내 나는 그것을 할 수 있는 방법을 찾았습니다. 성능 및 대기 시간 때문에 파일 작업(tmpfs 등)을 피하고 싶습니다. 비결은 명령의 출력이 무엇인지 dwdiff
또는 두 가지 인수로 알려주는 것입니다.wdiff
예그리고예전에는동일한 반복 내에서. 프로세스 대체는 나의 도우미입니다.
while true; do p1=$p2; p2=$(clear; iotop -ob -n1);
dwdiff -y "\010" -1 -c <(echo "$p1") <(echo "$p2"); sleep 1; done
-y "\010"
열이 잘 정렬되도록 하려면 변경된 단어 앞의 공백을 제거하세요 . $p1
절차 $p2
적 대체를 보존하는 데 사용되는 범위 <(...)
. 교체 시 출력을 직접 제공하는 것은 나에게 적합하지 않습니다. 여기서 이런 팁을 얻었습니다이것우편 엽서.
어쩌면 더 간단한 해결책이 있을 수도 있지만 결국 나는 너무 복잡합니다. 마음껏 포스팅해주세요!
답변2
ANSI
이스케이프 시퀀스를 사용할 수 있습니다 . 원하는 색상과 스타일을 설정하기 위해 \033[#m
#이 세미콜론으로 구분된 유효한 숫자 집합이 될 수 있는 구문이 있습니다 .
다음과 같은 색상을 정의할 수 있습니다.
CLEAR="\033[0m"
GREEN="\033[0;32m"
BLUE="\033[0;34m"
PURPLE="\033[0;35m"
RED="\033[0;31m"
YELLOW="\033[1;33m"
그리고 그것들을 다음과 같이 사용하십시오echo -e "${GREEN}Updated${CLEAR}"