Você pode canalizar sua entrada de um programa para outro assim:
echo "message here"|write $user
ou assim:
cat /tmp/message|write $user
if [ who | grep $user | grep pts ]
then
write $user
message here
EOF
fi
Aqui, se eu o executar, ele estará bloqueando na escrita e eu tenho que inserir uma mensagem manualmente e então pressionar Ctrl + d .
Existe uma maneira de enviar mensagem e EOF através do programa?
Você pode canalizar sua entrada de um programa para outro assim:
echo "message here"|write $user
ou assim:
cat /tmp/message|write $user
O que você provavelmente está procurando é o seguinte estilo de escrita (equivalente a outros 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: você não está diretamente "enviando um EOF" aqui, o shell apenas entende a palavra "EOF" como sua marca escolhida para finalizar a entrada e terminará a entrada lá - e escrever não pede para pressionar ctrl + d neste caso, porque está lendo as coisas que o shell está colocando nele.
Nota 2: Você pode achar útil saber que praticamente toda ferramenta de linha de comando no mundo unix permite esse tipo de truques de shell padrão, pois eles estão confiando apenas no conceito incrivelmente universal de stdin - escreve, como muitas outras ferramentas, irá ler o que é canalizado para ele - e só pedir ao usuário interativamente por input se nenhum tal estiver presente e um método de entrada do usuário faria sentido.
Para mais informações, há uma pergunta perguntando exatamente isso aqui: link