¿Cómo enviar un correo/escribir a otro usuario a través de un script de shell? ¿Cómo enviar EOF?

¿Cómo enviar un correo/escribir a otro usuario a través de un script de shell? ¿Cómo enviar EOF?
if [ who | grep $user | grep pts ]
then
              write $user
                   message here
                   EOF
fi

Aquí si lo ejecuto se bloquea al escribir y tengo que ingresar un mensaje manualmente y luego presionar Ctrl+ d.

¿Existe alguna forma de enviar mensajes y EOF a través del programa?

Respuesta1

Puedecanalizar su entrada de un programa a otrocomo esto:

echo "message here"|write $user

o así:

cat /tmp/message|write $user

Respuesta2

Lo que probablemente estés buscando es el siguiente estilo de escritura (equivalente a otros métodos)

write $user <<EOF
    message here
    as opposed to the
       echo "asd" | write $user
    method, using here-doc redirection transparently allows multiple lines
    and reads everything until seeing the delimiter
    so the sent message end here:
EOF

Nota: aquí no está "enviando un EOF" directamente, el shell simplemente entiende la palabra "EOF" como la marca elegida para finalizar la entrada y finalizará la entrada allí; y escribir no le pide que presione ctrl+d en este caso. , porque está leyendo lo que el shell le está canalizando.

Nota 2: Puede resultarle útil saber que prácticamentecadaLa herramienta de línea de comandos en el mundo Unix permite este tipo de trucos de shell predeterminados, ya que solo se basan en el concepto increíblemente universal de stdin (escribir, como muchas otras herramientas, leerá lo que se le canaliza) y solo preguntará al usuario de forma interactiva para obtener información si no hay ninguno presente y un método de entrada del usuario tendría sentido.

Para obtener más información, hay una pregunta que pregunta exactamente esto aquí:https://stackoverflow.com/questions/2500436/how-does-cat-eof-work-in-bash

información relacionada