Diferencia entre gato y gata

Comando cat

El shell redirige la entrada estándar al archivo nombrado: abre el archivo y envía 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 que entra por su entrada estándar, que se supone que debe imprimir.

¿cuál es la diferencia entre &gt; y

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í.

Leer más  Razas de perros con g

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».

Nombre de archivo cat

cat sólo es válido para tipos atómicos (lógico, entero, real, complejo, carácter) y nombres. Esto 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.

Cat vs cat

(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).

Leer más  Razas de perros mastin

Una gran diferencia es con los caracteres globbing *, ?, o [ (comodines) 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.

A primera vista, cat archivo.txt y cat < archivo.txt se comportan igual, pero hay mucho más detrás de 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.