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でも同様です。私エラーレポート

関連情報