utf8
나는 groff가 출력 형식의 굵은 텍스트를 표시하기 위해 다른 방법을 사용한다는 것을 발견했습니다 .
FreeBSD 14에서 groff는 [1m
터미널에 대한 이스케이프 코드(ESC, )를 내보냅니다.
$ printf ".Dd today\n.Sh NAME\n" | groff -mandoc -Tutf8 | od -c
0000000 \n 033 [ 1 m N A M E 033 [ 0 m \n
[...]
Linux에서 백스페이스 및 굵은 키 사용(debian Bookworm):
$ printf ".Dd today\n.Sh NAME\n" | groff -mandoc -Tutf8 | od -c
[...]
0000120 N \b N A \b A M \b M E \b E \n
왜 이런 일이 발생합니까? Linux groff가 터미널에도 ESC 코드를 사용하도록 하는 방법이 있습니까? groff 매뉴얼 페이지를 위에서 아래로 읽었지만 이 동작을 변경하는 옵션을 찾을 수 없습니다.
(결과를 후처리해야 하는데 ESC 코드를 사용하면 이 작업이 훨씬 쉽고 유연해집니다.)
편집하다:(@egmont 덕분에) 해결책은 데비안의 grotty(1) 매뉴얼을 읽고 다음을 사용하여 SGR 동작을 강제하는 것입니다.
printf ".Dd today\n.Sh NAME\n" | GROFF_SGR=y groff -mandoc -Tutf8
답변1
Debian Bookworm은 groff 1.22를 여기에 표시된 이전 백스페이스 재정의 동작으로 구성하고 이를 최신 SGR( 유사한) 동작 grotty
으로 되돌리는 방법과 함께 패치된 매뉴얼 페이지 에 문서화합니다.\e[1m
printf ".Dd today\n.Sh NAME\n" | GROFF_SGR=y groff -mandoc -Tutf8
unstable
주어진 구성과 패치는 groff 1.23 패키지 와 Ubuntu 23.04에 더 이상 존재하지 않는 것 같습니다 . 따라서 이것은 아마도 이전 동작을 볼 수 있는 마지막 데비안 버전일 것입니다. 그들은 업스트림 groff의 기본값을 따라 새로운 SGR 방법으로 전환하고 있습니다.
답변2
백스페이스 시퀀스를 남용 script
하거나 less
변환할 수 있습니다.
script --return --quiet -c "printf '.Dd today\n.Sh NAME\n' | groff -mandoc -Tutf8 | less" /dev/null | od -c
…
0000200 1 m N A M E 033 [ 0 m 033 [ m \r \n