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