Si entiendo el cat
manual correctamente:
concatenar archivos e imprimir en la salida estándar
cat
tomará 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
cat
crear un archivo de texto que contiene caracteres extraños? - ¿Debería implementarse un mecanismo para prevenir este comportamiento como la declaración try {} catch {}?
reset
comando puede ayudar a veces, pero esta no es una solución milagrosa.reset
y unareset
sola? No puedo ver ninguna (ni ninguna razón para ir por el camino más complicado)Respuestas:
cat
concatena 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
cat
como tal,cat
no 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,
cat
no 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á
cat
en 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 | bash
bash interpretará lo que se obtiene como comandos.fuente
cat
un archivo binario que puede contener instrucciones de texto sin formato comorm -rf .
este?echo
salir 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