Si entiendo el catmanual correctamente:
concatenar archivos e imprimir en la salida estándar
cattomará los archivos como argumento y los imprimirá en la salida estándar.
Lo que no entiendo es si uso el comando:
cat img.png > copy.png
Obtendré 2 archivos png idénticos mientras que si solo
cat img.png
Tengo todas las posibilidades de que mi terminal se estropee y malinterprete lo que escribo.
- ¿Como es eso posible?
- Los valores binarios siguen siendo datos binarios. ¿Por qué no muestra simplemente una serie de 0 y 1 o la interpretación de esos datos binarios en ASCII o lo que sea la codificación en el terminal?
- ¿También es posible este comportamiento al
catcrear un archivo de texto que contiene caracteres extraños? - ¿Debería implementarse un mecanismo para prevenir este comportamiento como la declaración try {} catch {}?

resetcomando puede ayudar a veces, pero esta no es una solución milagrosa.resety unaresetsola? No puedo ver ninguna (ni ninguna razón para ir por el camino más complicado)Respuestas:
catconcatena los archivos dados como argumentos en la línea de comando a la salida estándar, lee bytes a la vez y, por defecto, no realiza ninguna interpretación de los bytes que lee.En su primer ejemplo, está redirigiendo stdout a un archivo, por eso obtiene un nuevo archivo.
En su segundo ejemplo, los bytes se escriben en el terminal, y es el terminal el que interpreta las secuencias de caracteres como secuencias de control para el terminal, es por eso que obtiene un comportamiento inusual en su terminal. No tiene nada que ver
catcomo tal,catno sabe qué va a hacer con su salida. Puede enviarlo a través de una tubería a otro programa para interpretar / procesar / imprimir o jugar "Cantando bajo la lluvia".Entonces, siguiendo la filosofía de Unix,
catno debe intentar adivinar lo que está tratando de hacer.editar 1 respuesta al primer comentario de @ kiwy a continuación.
Sí y no, déjame explicarte,
No, si está
caten un terminal, porque (el software del terminal) está enviando la salida a su pantalla o está interpretando secuencias de control (está emulando una pieza de hardware antigua, es decir, un dispositivo de teletipo ).pero,
Sí, si se conecta a una tubería y el programa receptor puede interpretar los caracteres como comandos.
mira cat esto como un ejemplo,
cat anyOldShellScript | bashbash interpretará lo que se obtiene como comandos.fuente
catun archivo binario que puede contener instrucciones de texto sin formato comorm -rf .este?echosalir si lo desea. Vea stackoverflow.com/questions/5947742/… para saber cómo hacerlo y termsys.demon.co.uk/vtansi.htm para obtener información sobre lo que es posibleSupongo que esto sucede principalmente debido a caracteres no imprimibles con códigos inferiores a 0x20. Esos son códigos especiales de control / escape, que se utilizan para teclas como Retroceso, Eliminar, etc.
fuente