터미널이 이전 명령의 이전 출력 텍스트를 다시 표시하도록 하려면 어떻게 해야 합니까? 가능합니까?

터미널이 이전 명령의 이전 출력 텍스트를 다시 표시하도록 하려면 어떻게 해야 합니까? 가능합니까?

방금 몇 시간이 걸린 작업을 실행했는데 해당 텍스트를 텍스트 파일로 파이프하는 것을 잊어버렸습니다.

의사코드:

echo [previous text output] > OutputHistory.txt

또한 1) 디스플레이에 "\t"와 같은 중요한 서식 문자가 누락되어 있고 2) 터미널 창을 닫았을 수 있기 때문에 터미널에서 내용을 "복사하여 붙여넣기"할 수 없습니다.

Unix 명령을 사용하여 이를 달성할 수 있습니까?

답변1

이는 일반적으로 불가능합니다. 애플리케이션이 일부 출력을 내보내면 해당 출력을 저장할 수 있는 유일한 장소는 터미널 메모리입니다. 극단적인 예를 들자면, 이때가 1970년대이고 터미널이 하드 카피 프린터라면, 아무도 입력하지 않으면 출력이 컴퓨터로 반환되지 않습니다.

출력이 여전히 터미널 에뮬레이터의 스크롤 버퍼에 있는 경우 이를 다시 가져올 수 있지만 이를 수행하는 방법은 터미널에 따라 다르며 표준 방법은 없습니다. 이 시점에서 탭 문자는 공백으로 변환되거나 변환되지 않았을 수 있습니다. 형식 정보(색상, 굵은 글씨 등)를 검색할 수 있는지 여부와 검색 가능한 형식은 터미널에 따라 다릅니다. 대부분의 터미널과 마찬가지로 명령 출력이 시작되고 끝나는 위치를 찾는 쉽고 확실한 방법은 없습니다.

미리 계획한다면 명령의 출력을 투명하게 기록할 수 있습니다.script. 명령이 사용될 때 여전히 터미널에 기록되고 있기 때문에 실행은 script mycommand.log mycommand이와 다를 수 있습니다 .mycommand 2>&1 | tee mycommand.logscript

한 가지 절충안은 항상 screen또는 내에서 오래 지속되는 명령을 실행하는 것입니다 tmux. 둘 다 롤백 버퍼를 파일로 덤프하는 방법이 있으며 세션 연결을 끊었다가 프로그램 실행을 중단하지 않고 다시 연결할 수 있다는 추가 이점이 있습니다.

답변2

원시 출력은 터미널 응용 프로그램이 원시 출력을 어딘가에 파일에 저장하는 경우(예: iTerm로깅이 활성화된 경우) 또는 다른 로깅 응용 프로그램( autoexpect(1)또는 이에 상응하는 응용 프로그램)이 출력을 저장하는 경우에만 사용할 수 있습니다. 일반적으로 이는 미리 설정해야 하며 관리가 필요합니다. 예를 들어 누군가가 yes잠시 동안 실행 상태로 두는 경우 디스크 공간은 어디로 가나요?

관련 정보