간단한 명령줄 도구가 후속 데이터를 표시하지 못하도록 하는 제어 문자나 핵이 있습니까?

간단한 명령줄 도구가 후속 데이터를 표시하지 못하도록 하는 제어 문자나 핵이 있습니까?

cat종종 바이너리 데이터로 난독화되는 명령줄 도구(간단한 텍스트 편집기일 수도 있음)에 의해 표시되지 않는 추악한 데이터를 숨기고 싶습니다 . 예를 들어, VT100 터미널이 이진 출력용으로 잘못 구성되는 경우가 있었습니다.

<?php
// PHP code shown by text tools on the command line

__halt_compiler();

// here some fake EOF mark for simple text processing tools
// hidden ugly data

할 수 있는파일 끝간단한 스트림 기반 텍스트 뷰어 도구, 특히 Linux 명령줄 도구(그러나 일부 Windows 도구도 가능)를 사용하고 계십니까?

cat다른 사람이 사용하거나 유사한 파일을 사용하면 화면에 쓰레기가 표시되지 않도록 혼합 텍스트/바이너리 파일에서 솔루션을 찾고 있습니다 .

답변1

한 가지 "해결책"은 많은(전부는 아님) 터미널에서 지원하는 대체 화면 버퍼를 사용하는 것입니다. 다음 명령을 고려하십시오.

printf "Hello, \e[?1049h ABCDEFG \e[?1049l World\n"

대체 화면 버퍼를 지원하는 터미널에서는 다음과 같은 메시지가 표시됩니다.

Hello,  World!

터미널이 갑자기 깜박일 수도 있습니다.

\e[?1049h순서로 인해 터미널은 대체 화면 버퍼로 전환되고 이후에 인쇄되는 모든 내용이 종료됩니다. 이 \e[?1049l시퀀스는 기본 화면 버퍼로 다시 전환됩니다.

PHP를 사용한 예:

<?php
echo "Hello";
// Nothing to see here...^[[?1049h
echo ", World!\n";
//^[[?1049l
?>

이는 ^[이스케이프 문자를 나타냅니다.

대체 화면 버퍼는 터미널 사용자 인터페이스를 만들고 싶지만 닫은 후 터미널 내용을 복원하려는 많은 프로그램에서 사용됩니다. 그게 다야더 적은전체 창을 사용하여 콘텐츠를 표시할 수 있지만 종료 후에도 이전 명령은 모두 계속 표시됩니다. 당신이 가지고 있다면버퍼링 해제설치 후 다음을 확인할 수 있습니다.

$ unbuffer less -f /dev/null | xxd
00000000: 1b5b 3f31 3034 3968 1b3d 0d0d 1b5b 4b1b  .[?1049h.=...[K.

보시다시피, 가장 먼저 인쇄되는 것은 \x1b[?1049h터미널이 화면 버퍼를 전환하도록 하는 것입니다.

대부분의 편집자는 인쇄할 수 없는 문자를 표시하려고 시도하지 않기 때문에 (내가 아는 한) 어떤 편집기에서도 작동하지 않습니다.

관련 정보