질문

질문

질문

우연히도 많은 대괄호가 포함된 문자열을 STDOUT인쇄 하려고 하다가 IO 시간이 많이 걸리는 것을 발견했습니다(~100KB의 경우 ~4초). gnome-terminal문자열에 특정 내용이 있는지 확인하기 위해 문자열의 다른 길이와 매우 다른 시간을 인쇄했습니다.

구체적으로:

$ time cat file1
# ... snip ...
real    0m3.968s
user    0m0.004s
sys 0m0.001s

$ time cat file2
# ... snip ...
real    0m0.052s
user    0m0.006s
sys 0m0.001s

$ ls -l file*
-rw-rw-r-- 1 sinan sinan 115441 Dec 19 16:38 file1
-rw-rw-r-- 1 sinan sinan 115441 Dec 19 16:38 file2

속도 저하의 원인이 무엇인지 알 수 없습니다.gnome-terminal, 대괄호 안의 내용을 구문 분석하여 특별한 의미를 부여하는 것으로 의심됩니다 . 누구든지 어떤 아이디어가 있습니까?

버전 정보

  • gnome-terminal --version:GNOME Terminal 3.36.2 using VTE 0.60.3 +BIDI +GNUTLS +ICU +SYSTEMD
  • bash --version:GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)

답변1

에그몽vte 버그 추적기에 버그가 보고되었습니다.(vte는 gnome-terminal, anjuta, deepin-terminal, gtkterm, lilyterm, lxterminal, mate-terminal, remmina, sakura, tilda, vinagre, xfce4-terminal 등에서 사용되는 터미널 에뮬레이터 라이브러리입니다.) 그것은 밝혀졌다기본 fribidi 라이브러리의 버그, 이는 2021년 10월 현재 수정되지 않았습니다.

해결 방법: 양방향 지원을 비활성화합니다.

에그몬트도제안된 솔루션이렇게 하면 양방향 지원이 비활성화됩니다. 분명히 이 해결 방법은 Bidi 지원에 관심이 없는 경우에만 도움이 됩니다.

Gnome Terminal의 경우 각 프로필에 적용해야 하는 설정을 숨겨 이를 수행할 수 있습니다. 다음 명령은 귀하의 계정에 대해 이 작업을 영구적으로 수행합니다.

for p in $(dconf list /org/gnome/terminal/legacy/profiles:/); do dconf write /org/gnome/terminal/legacy/profiles:/${p%/}/enable-bidi false; done

vte를 사용하는 모든 터미널의 경우 bidi 지원을 일시적으로 비활성화할 수 있습니다.

printf '\e[8l'

그러나 이는 터미널이 재설정될 때까지만 지속됩니다. 쉘 프롬프트에 넣으면 명령줄 응용 프로그램에는 도움이 되지만 전체 화면 응용 프로그램에는 도움이 되지 않습니다. 배쉬에서:

PS1='\[\e[8l\]'$PS1

zsh에서:

PS1='%{\e[8l%}'$PS1

양방향 지원을 효과적으로 비활성화하는 보다 일반적인 터미널 독립적 방법은 .vte(값 \e[8l) 에 터미널 이름을 포함하도록 터미널의 재설정 순서를 변경하는 것입니다 . 바라보다$TERMxterm-256color커서 깜박임을 멈추는 방법설명을 위해. 이 명령은 이미 열려 있는 터미널이 아닌 새 터미널에만 영향을 미칩니다.

TERM=xterm-256color infocmp -1 | sed '/^.rs[12]=/ s/,$/\\E[8l,/' | tic -

관련 정보