localizar pontos de interrogação de saídas quando localizadob contém certos caracteres (abas) a menos que a saída seja canalizada

1

Eu construo meu próprio locatedb usando frcode para que ele contenha filesizes após os caminhos (ajuda-me a procurar arquivos grandes rapidamente). Eu armazeno o caminho separado do tamanho por um caractere de tabulação. Eu tenho notado que se eu usar locate na linha de comando, eu recebo um ? (ponto de interrogação) onde a tab deve estar, a menos que eu canalize para cat , o que é estranho . Alguém sabe por que isso acontece?

$ 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
...
    
por Yuval 21.09.2016 / 12:46

1 resposta

1

Suspeitei que isso é codificado em locate verificando se a saída é stdout ou não. E, de fato, locate tem uma condição para substituir caracteres não imprimíveis por pontos de interrogação quando a saída é um tty (veja printquoted.c e qmark.c ). Ele considera que os espaços em branco na faixa de caracteres de controle ASCII também não são imprimíveis. Eu acho que isso é lamentável, pois não se esperaria que a saída para o terminal fosse alterada ao passar por cat . Isso também é verdade para findutils 4.6.0. Enviei um relatório de erros .

    
por 21.09.2016 / 12:46