Diferencia entre gato y gata

Cat linux

Estaba trabajando en un tutorial y vi el uso de ambos cat myfile.txt y cat < myfile.txt. ¿Hay alguna diferencia entre estas dos secuencias de comandos? Parece que ambos imprimen el contenido de un archivo al shell.

Técnicamente, podrían tener efectos diferentes. Por ejemplo, sería posible tener una implementación del shell que fuera más (o menos) privilegiada que el programa cat. En ese caso, uno podría no abrir el archivo, mientras que el otro sí.

No hay ninguna diferencia importante visible en su caso de prueba. La más obvia sería el mensaje de error que se obtiene si no hay un archivo llamado miarchivo.txt en el directorio actual, o si no se le permite leerlo.

En un caso más general, una diferencia importante es el uso de redirecciones no puede ser utilizado para imprimir el contenido de más de un archivo, que es después de todo el propósito original del comando cat (es decir, catenate). Tenga en cuenta que el intérprete de comandos intentará de todos modos abrir todos los archivos pasados como entrada redirigida, pero sólo pasará realmente el último a cat, a menos que utilice zsh y su multios «zshism».

Diferencia entre cat y echo

cat sólo es válido para tipos atómicos (lógico, entero, real, complejo, carácter) y nombres. Significa que no puede llamar a cat sobre una lista no vacía o cualquier tipo de objeto. En la práctica, simplemente convierte los argumentos en caracteres y los concatena, por lo que puede pensar en algo como as.character() %>% paste().

En algunos casos, es importante devolver la salida tal y como está en la consola, por ejemplo cuando se quiere copiar-pegar la salida. En esos casos, realmente no quieres devolver un vector de caracteres. Encontré una estrategia útil en esos casos para combinar print y cat: Usar print para crear el objeto, usar cat para imprimirlo en tu consola.

Comando cat

Estaba trabajando a través de un tutorial y vi el uso de ambos cat myfile.txt y cat < myfile.txt. ¿Hay alguna diferencia entre estas dos secuencias de comandos? Parece que ambos imprimen el contenido de un archivo al shell.

Técnicamente, podrían tener efectos diferentes. Por ejemplo, sería posible tener una implementación del shell que fuera más (o menos) privilegiada que el programa cat. En ese caso, uno podría no abrir el archivo, mientras que el otro sí.

No hay ninguna diferencia importante visible en su caso de prueba. La más obvia sería el mensaje de error que se obtiene si no hay un archivo llamado miarchivo.txt en el directorio actual, o si no se le permite leerlo.

En un caso más general, una diferencia importante es el uso de redirecciones no puede ser utilizado para imprimir el contenido de más de un archivo, que es después de todo el propósito original del comando cat (es decir, catenate). Tenga en cuenta que el intérprete de comandos intentará de todos modos abrir todos los archivos pasados como entrada redirigida, pero sólo pasará realmente el último a cat, a menos que utilice zsh y su multios «zshism».

Gatos en plural

El intérprete de comandos redirige la entrada estándar al archivo nombrado: abre el archivo y transmite su contenido a cat en la entrada estándar. cat no recibe argumentos. Sin argumentos, imprime lo que haya en stdin: el contenido del archivo.

Cuando cat se ejecuta sin archivos de argumentos, leerá de la entrada estándar (por ejemplo, como si escribiera directamente en cat) y escribirá en la salida estándar. Pero < archivo1.txt le dice al shell (por ejemplo, bash) que abra el archivo file1.txt, y lo redirija a cat a través de la entrada estándar:

Como puede ver, el efecto es el mismo, que cat leerá el archivo dado; la diferencia es quién abre el archivo. En el primer caso, se le dice a cat que abra el archivo por sí mismo, mientras que en el segundo caso el shell lo abre, y cat no sabe nada, excepto que hay un flujo de datos entrando a través de su entrada estándar, que se supone que debe imprimir.

Por Sofía Salome

Hola mundo, soy Sofía Salomé copywriter de Damboats.es