locatedb에 특정 문자(탭)가 포함되어 있으면 출력이 파이프되지 않는 한 검색 결과에 물음표가 표시됩니다.

locatedb에 특정 문자(탭)가 포함되어 있으면 출력이 파이프되지 않는 한 검색 결과에 물음표가 표시됩니다.

경로 뒤에 파일 크기가 포함되도록 locatedb용도 를 구축했습니다 (대용량 파일을 빠르게 찾는 데 도움이 됩니다). frcode경로와 크기를 탭으로 구분하여 저장합니다. 명령줄에서 찾기를 사용하면 ?탭이 있어야 할 위치에 (물음표)가 나타나는 것을 확인했습니다.내가 보내지 않는 이상 cat, 이상합니다. 왜 이런지 아는 사람 있나요?

$ mkdir test-locatedb && cd test-locatedb
$ touch a b c d e f g
$ du -a | awk -v 'OFS=\t' '{print $2,$1}' | /path/to/frcode > test.locatedb
$ locate --database=test.locatedb a
./test.locatedb?1
./a?1
$ locate --database=test.locatedb a | cat
./a     1
./test.locatedb 1    
$ /usr/lib/locate/frcode -v
frcode (GNU findutils) 4.4.2
...

답변1

나는 이것이 locate출력이 존재하는지 확인함으로써 코딩 된 것이라고 의심한다 stdout. 실제로 locate출력이 tty일 때 인쇄할 수 없는 문자를 물음표로 바꾸는 조건이 있습니다(참조:printquoted.c그리고qmark.c). 또한 ASCII 제어 문자 범위 내의 공백을 인쇄할 수 없는 것으로 간주합니다. 파이프로 연결될 때 터미널의 출력이 변경될 것이라고 기대하지 않기 때문에 이는 불행한 일이라고 생각합니다 cat. 이는 findutils4.6.0에서도 마찬가지입니다. 나는오류 보고서.

관련 정보