¿Cómo podría EOF `cat` a través de `netcat` sin cerrar la conexión?

¿Cómo podría EOF `cat` a través de `netcat` sin cerrar la conexión?

Me encontré con un problema donde tengo un servidor ncat con el comando ncat -l [port] -k -c "cat > foo; cat > bar". Cuando me conecto a este servidor a través de netcat, me permite escribir en el archivo fooy después de eso, bar. El problema es que cuando el cliente que se conecta quiere dejar de escribir fooenviando un ^D, cierra el cliente en lugar de continuar escribiendo en bar, por lo que barnunca se escribe en él. ¿Cómo puedo evitar esto? ¿Cuál es una alternativa catque me permite salir con un comando en lugar de un EOF?

Respuesta1

Si lo que desea hacer es transferir 2 archivos con solo 1 conexión, de alguna manera tendrá que usar un marcador para separar los archivos en el flujo de datos, ya que el final del archivo es una lectura de longitud 0 que netcat usará para cerrar. la toma.

Control-DPuede ser lo que puede escribir en una terminal para indicar el final del archivo, pero no genera un carácter, finaliza la lectura con una longitud de 0. No hay ningún carácter Control-Den el flujo de datos.

Para transferir 2 archivos simplemente, puede usar un comando de empaquetado existente como tar. Úselo nc -k -l 4458 -v -c 'tar xf - >&2'como receptor y tar cf - foo barcomo remitente. (Dado que los nombres de los archivos provienen del remitente, debes confiar en el remitente).

Alternativamente, si sus archivos son de texto simple, puede introducir una línea especial para separar los 2 archivos. Por ejemplo, en el remitente cat foo; echo bye; cat bary en el receptor algo así como

nc -k -l 4458 -v -c 'awk -v file=foo '\''/^bye$/{ file="bar";next }{print >file}'\'

Este script GNU awk contiene el primer nombre de archivo en variable file, luego, cuando ve la línea de "adiós", cambia al segundo nombre de archivo.

información relacionada