Direto ao ponto.
Tudo depende do valor LANG
ou LC_ALL
definido na sua sessão de terminal quando você executa tr
. O Linux os definiu como C
, enquanto o macOS definiu como en_US.UTF-8
. É claro que en_US
poderia ser algum outro idioma local como en_UK
(inglês do Reino Unido), mas o ponto é a configuração [something].UTF-8
em vez de ASCII simples via C
é o que está causando isso.
Mais detalhes.
Parece que o tr
no macOS está convertendo o 0xff
no equivalente a UTF8 de c3bf
quando Obtém em vez do puro ASCII 0xff
. Isso é explicado aqui no este tópico de suporte da comunidade da Apple :
Linux doesn't handle Unicode in the Terminal like the Mac does. If you set the "LANG" environment variable to "C" (as it probably is on Linux), it will work. Otherwise, all those high-order bits are going to get interpreted as Unicode characters.
E usando esse LANG
tip funciona! Apenas faça o seguinte; testado pessoalmente por mim só agora no macOS 10.13.6 (High Sierra).
Primeiro, tome nota de como o valor LANG
existente é assim:
echo $LANG
A saída que vejo é:
en_US.UTF-8
Agora defina o valor LANG
como C
da seguinte forma:
LANG=C
E execute o comando novamente:
dd if=/dev/zero ibs=1k count=100 | tr "hexdump -C paddedFile.bin
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00019000
0" "7" >paddedFile.bin
Agora, os valores de hexdump
devem ficar assim:
LANG=en_US.UTF-8
Para redefinir o valor LANG
, feche a sessão do terminal ou apenas execute este comando:
dd if=/dev/zero ibs=1k count=100 | LANG=C tr "dd if=/dev/zero ibs=1k count=100 | LC_ALL=C tr "echo $LANG
0" "7" >paddedFile.bin
0" "7" >paddedFile.bin
Ou - como apontado nos comentários - você pode definir o valor LANG
diretamente nas opções da linha de comando antes de chamar tr
da seguinte forma:
en_US.UTF-8
E você ainda pode usar LC_ALL
em vez de LANG
porque LANG
é derivado de LC_ALL
assim:
LANG=C