2012-10-31 1 views
4

오늘은 이맥스 쉘에서이 같은 명령을 실행 :emacs 셸에서 명령이 상당히 느리게 실행됩니까? 어떻게 이것을 방지 할 수 있습니까?

출력 만 이상의 라인을 쉽게하기 때문에 bash는 조금 걸리지 만하지 그 긴 (약 15 초)
./someBinary | grep foo | cut -c30- | sort | uniq -c 

. 그러나 이맥스 셸에서이 명령을 실행했을 때 한 시간 이상 기다렸는데 여전히 실행 중이며 top으로 확인하면 프로세스가 눈에 띄게 작동합니다. 필자는 이멕스가 lisp에서 파이핑중인 유닉스 툴을 구현했기 때문에 이것이 가능한가 의심 스럽다. 그리고 이것이 이유 일 경우, 시스템에 디폴트로 설정하는 방법이 있다면 말이다.

답변

3

Emacs는 쉘 버퍼의 최종 출력을 캡쳐하고 글꼴 잠금 및 기타 분석 (예 : 줄 번호 계산)을 적용하여 표시합니다. 또한 디스플레이를 스크롤하여 최신 출력을 표시합니다. Emacs는 병리학 적으로 긴 명령 출력을 도용하는 조항을 가지고 있지만 실제로 수백만 라인에 달하는 엄청난 양의 출력 계산을 위해 최적화되어 있지 않으므로 터미널 에뮬레이터보다 눈에 띄게 성능이 저하되어 전체 파이프 라인 속도가 느려집니다.

출력에 관심이 없다면 /dev/null 또는 tail -500으로 리다이렉트하십시오. 어쨌든 전형적인 터미널 스크롤 백에서 볼 수 있습니다.

2

아니요, 이맥스는 이러한 도구를 구현하지 않습니다. 명령 행에서 실행하는 것과 동일한 도구를 실행 중입니다. 그러나 출력은 다양한 파이프를 통해 전달되고 있으며 아마도 emacs에 의해 다양한 형식이 적용 되었기 때문에 emacs가 극단적 인 속도 저하의 가장 큰 원인 일 수 있습니다. 하나의 쉬운 일은 쉘 버퍼에서 폰트 잠금 모드를 사용 불가능하게하는 것입니다.

0

eshell 또는 shell 중 어느 것을 사용하는지 말하지 않습니다. 내 경험상 shell은 잘 작동하지만,은 파이프를 통해 1k 라인을 넣으려는 모든 경우에 완전히 사용할 수 없습니다 (이는 eshell의 다른 기능이 상당히 멋지 기 때문에 슬프다).

|을 사용하는 한 eshell은 출력이 단 한 줄이라도 느리기 때문에 속도가 느린 실제 | 연산자 (emacs-lisp의 eshell에서 구현 됨) 인 것 같습니다.

관련 문제