ASCII가 아닌 문자가 포함된 디렉토리가 있는데 diff
이를 사용하면 diff 출력에 utf8 문자 대신 이스케이프 시퀀스가 표시됩니다.
robert@saaz:~$ mkdir foo föö
robert@saaz:~$ echo 1 > foo/bar
robert@saaz:~$ echo 2 > föö/bar
robert@saaz:~$ diff -r f??
diff -r foo/bar "f\303\266\303\266/bar"
1c1
< 1
---
> 2
내가 기대하는 것은 f\303\266\303\266/bar
diff 출력의 첫 번째 줄이 아닙니다 föö
.
저는 Ubuntu 20.04, diff 3.7을 사용하고 있습니다.
robert@saaz:~$ diff --version
diff (GNU diffutils) 3.7
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Paul Eggert, Mike Haertel, David Hayes,
Richard Stallman, and Len Tower.
를 사용하여 디렉토리를 보면 ls
(지우더라도 LS_OPTIONS
) 예상대로 utf8 문자로 나타납니다.
robert@saaz:~$ LS_OPTIONS=x ls -ld f??
drwxrwxr-x 2 robert robert 4.0K 2020-08-06 17:38 foo
drwxrwxr-x 2 robert robert 4.0K 2020-08-06 17:39 föö
내 로케일은 모두 utf8입니다.
robert@saaz:~$ locale
LANG=en_US.UTF-8
LANGUAGE=en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
diff
ASCII가 아닌 문자를 동시에 표시하는 방법은 무엇입니까 ?
답변1
이것은 GNU diff 구현의 문제입니다.
대신 UNIX diff 구현을 사용할 수 있습니다 gdiff
.
UNIX diff 명령의 이식 가능한 버전은 schilytools의 일부입니다. 다음을 확인하십시오.
/usr/bin/diff -r f??
diff -r foo/a "f\366\366/a"
1c1
< a
---
> b
그리고:
/opt/schily/ccs/bin/diff -r f??
diff -r foo/a föö/a
1c1
< a
---
> b
/opt/schily/ccs/bin/diff -version
diff schily-SCCS version 5.09 2020/07/14 (x86_64-unknown-linux-gnu)
소스코드 다운로드 주소는 다음과 같습니다.http://sourceforge.net/projects/schilytools/files/