¿Cuál es la diferencia entre gato y camiseta?

¿Cuál es la diferencia entre gato y camiseta?

Estaba jugando con Apache php.iniy lo conseguí, así que cuando envío correos electrónicos con un archivo PHP que tiene la mail()función, guardará el correo electrónico en mi computadora, lo cual es bueno para pruebas y para desarrolladores web. Esta es la línea de código que agregué en php.ini:

sendmail_path = "cat > /home/cam/Documents/TestEmails/`date '+%Y-%m-%d - %H-%M-%S'`.eml"

También esta línea de código funcionó también:

sendmail_path = "tee > /home/cam/Documents/TestEmails/`date '+%Y-%m-%d - %H-%M-%S'`.eml"

¿Cuál es la diferencia entre los comandos caty ?tee

Respuesta1

TL;DR: catlee archivos cuyos nombres le pasas, pero teeescribe en ellos. Sólo cuando no les pasa ningún nombre de archivo, tienen el mismo efecto. De lo contrario, usarlo teecuando quiere decir catpuede sobrescribir los archivos que deseaba leer, provocando una pérdida accidental de datos.

caty teese comportan igual cuando no les das ningún nombre de archivo. Eso es lo que está sucediendo en tu ejemplo; los comandos tienenredirecciones de salida( >) pero no hay argumentos reales de línea de comandos. Cuando pasas los nombres de archivos de los comandos caty tee, se comportan de manera diferente entre sí, e incluso puedes sobrescribir archivos accidentalmente y perder datos al pasar sus nombres a teecuando querías pasarlos a cat.

El motivo caty teehacer lo mismo sin ningún argumento, pero cosas diferentes con nombres de archivos pasados ​​como argumentos, se pueden discernir al considerar el comportamiento de cada uno. En general, tienen un comportamiento casi opuesto. catlee potencialmente muchos archivos y envía su salida a un lugar, mientras que teelee una entrada y la envía a potencialmente muchos archivos.

gato

catcopia el contenido de todos sus archivos de entrada asalida estándar, uno después del otro. Es decir que concatena los archivos. Por ejemplo, cat x ygenera el contenido de xseguido del contenido de y. Cuando se le pasa un único nombre de archivo, copia el contenido de ese archivo a la salida estándar y luego, como no tiene más argumentos, se detiene.

cuando corres catconNonombres de archivos, por defecto lee desde su propioentrada estándar. Básicamente, eso significa que lee lo que sea que estécanalizadooredirigidoa él, o cualquier otra cosa que se escriba en una terminal. (Otra forma de decir esto es que, sin nombres de archivos, catse comporta como cat -, ya que cat,como varios otros comandos, lo trata -especialmente y lo toma para designar la entrada estándar).

tee

teecopia el contenido de su entrada estándar a todos sus archivos de salidaasí como su propia salida estándar. Es decir que funciona como uncruce en T--o, más precisamente,nortecruces en T dondenortees el número de archivos de salida cuyos nombres le pasa. Por ejemplo, tee xlee su entrada, la escribe en el archivo xy también la escribe en su propia salida estándar. tee x ylee su entrada, la escribe en el archivo xytambiénal archivo yy también lo escribe en su propia salida estándar.

El uso más común teees insertarlo en una canalización con un único argumento de nombre de archivo. Por ejemplo, supongamos que está canalizando la salida de un comando llamado fooa la entrada de un comando llamado bar. Podrías escribir foo | bar. Pero si también desea registrar la salida en un archivo llamado logfilepara poder inspeccionarlo, puede usar foo | tee logfile | bar.

teesobrescribe los archivos cuyos nombres le asignas, a menos que le pases la -aopción, en cuyo caso los agrega. Por ejemplo, para agregarlo a ese registro en lugar de sobrescribirlo, puede usar foo | tee -a logfile | bar.

A diferencia de cat, el teecomando no trata la obtención de argumentos sin nombre de archivo como un caso especial. En lugar de eso, simplemente escribe su entrada entodo cerode los archivos cuyos nombres le dio y luego lo pasa a su salida estándar como de costumbre. El efecto es que, al igual que con cat, ejecutar teesin nombres de archivos también copia la entrada estándar en la salida estándar.

La cultura favorece a cat cuando solo desea copiar stdin a stdout.

Si bien puedes usar cualquiera de ellos cato teesin argumentos para este propósito, si lo usas cat, la gente sabrá a qué te refieres. teesin argumentos está bien, peroaspectocomo un error. A veces esto se describe diciendo que cates elidiomáticomanera de hacerlo.

Tenga en cuenta también que las opciones de línea de comandos admitidas por caty teeson diferentes. Probablemente se esperaría esto, ya que en su mayoría hacen cosas diferentes y, por lo tanto, son capaces de personalizar su comportamiento de una manera totalmente diferente. Verman catyman teepara más detalles, especialmente sobre esto.

Respuesta2

En resumen cates para leer (entrada manualyarchivos) y escribir (con >y >>) en archivos. Y teesólo se trata de escribir en archivos, pero ensimultáneamentede acuerdo con la salida del comando que sirve como su entrada.

Por ejemplo:

  • ping 192.168.1.xx | tee [-a] ping_report.txt

Con el comando que se muestra arriba puedessimultáneamentever el resultado del pingcomandoyesa salida se escribirá en el ping_report.txtarchivo (para ser analizada más adelante, por supuesto). Si -ase utiliza el parámetro, entonces la entrada (salida del primer comando) se agrega al ping_report.txtarchivo; de lo contrario, anula el contenido actual con la nueva entrada.

información relacionada