Se eu entendi o cat
manual corretamente:
concatenar arquivos e imprimir na saída padrão
cat
pegará os arquivos como argumento e os imprimirá na saída padrão.
O que eu não entendo é se eu usar o comando:
cat img.png > copy.png
Vou obter 2 arquivos png idênticos, se eu apenas
cat img.png
Tenho todas as chances de que meu terminal fique bagunçado e interprete mal o que digito.
- Como isso é possível?
- Os valores binários ainda são dados binários. Por que simplesmente não mostra uma série de 0 e 1 ou a interpretação desses dados binários em ASCII ou qualquer que seja a codificação no terminal?
- Esse comportamento também é possível através de
cat
um arquivo de texto contendo caracteres estranhos? - Um mecanismo para impedir esse comportamento, como a instrução try {} catch {}, deve ser implementado?
reset
comando pode ajudar às vezes, mas essa não é uma solução milagrosa.reset
e umreset
entre Ctrl-J? Eu não consigo ver nenhuma (nem qualquer razão para seguir o caminho mais complicado)Respostas:
cat
concatena arquivos fornecidos como argumentos na linha de comando para a saída padrão, lê bytes por vez e, por padrão, não realiza nenhuma interpretação dos bytes que lê.No seu primeiro exemplo, você está redirecionando o stdout para um arquivo, é por isso que você obtém um novo arquivo.
No seu segundo exemplo, os bytes são gravados no terminal, e é o terminal que interpreta sequências de caracteres como sequências de controle do terminal; é por isso que você obtém um comportamento incomum no terminal. Não tem nada a ver com
cat
isso,cat
não sabe o que você fará com a saída. Você pode enviá-lo através de um canal para outro programa para interpretar / processar / imprimir ou tocar "Singing in the rain".Então, seguindo a filosofia unix,
cat
não tente adivinhar o que você está tentando fazer.editar 1 resposta para o primeiro comentário de @ kiwy abaixo.
Sim e não, deixe-me explicar,
Não, se você estiver
cat
em um terminal, porque ele (o software do terminal) está enviando a saída para sua tela ou interpretando as seqüências de controle (emula um hardware antigo, por exemplo, um dispositivo de teletipo ).mas,
Sim, se você usar um pipe e receber um programa, poderá interpretar os caracteres como comandos.
olhe cat this por exemplo, o
cat anyOldShellScript | bash
bash irá interpretar o que ele obtém como comandos.fonte
cat
um arquivo binário que possa conter instruções em texto sem formatação comorm -rf .
esta?echo
produzi-los se quiser. Veja stackoverflow.com/questions/5947742/... para saber como fazê-lo e termsys.demon.co.uk/vtansi.htm para alguns do que é possívelEu acho que isso acontece principalmente por causa de caracteres não imprimíveis com códigos abaixo de 0x20. Esses são códigos especiais de controle / escape, usados para teclas como Backspace, Delete etc.
fonte