Gato y gata diferencia
Cat filename less
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».
Comando touch vs cat
cat sólo es válido para tipos atómicos (lógico, entero, real, complejo, carácter) y nombres. Esto significa que no se 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.
Cat linux
(Así que en algunos otros comandos -es decir, no el comando mostrado en la pregunta- puede haber una diferencia. En particular, si usted no puede acceder a archivo.txt pero el usuario root sí, entonces sudo cat archivo.txt funciona pero sudo cat < archivo.txt no).
Una gran diferencia es con los caracteres globbing (comodines) *, ?, o [ o cualquier otra cosa que el shell pueda expandir en múltiples nombres de archivo. Cualquier cosa que el intérprete de comandos expanda en dos o más elementos, en lugar de tratarla como un solo nombre de archivo, no puede abrirse para la redirección.
En la superficie, cat archivo.txt y cat < archivo.txt se comportan igual, pero hay mucho más que sucede detrás de las escenas con esa diferencia de un solo carácter. Ese único carácter < cambia la forma en que el shell entiende file.txt, quién abre el archivo y cómo se pasa el archivo entre el shell y el comando. Por supuesto, para explicar todos estos detalles también necesitamos entender cómo funciona la apertura de archivos y la ejecución de comandos en el shell, y esto es lo que mi respuesta pretende conseguir: educar al lector, en los términos más sencillos posibles, sobre lo que realmente ocurre en estos comandos aparentemente simples. En esta respuesta encontrarás múltiples ejemplos, incluyendo aquellos que usan el comando strace para respaldar las explicaciones de lo que realmente sucede detrás de escena.
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».