Como enviar um email/gravação para outro usuário através de um script de shell? Como enviar EOF?

Como enviar um email/gravação para outro usuário através de um script de shell? Como enviar EOF?
if [ who | grep $user | grep pts ]
then
              write $user
                   message here
                   EOF
fi

Aqui se eu executar ele fica bloqueando na gravação e tenho que inserir uma mensagem manualmente e depois apertar Ctrl+ d.

Existe uma maneira de enviar mensagem e EOF através do programa?

Responder1

Você podecanalize sua entrada de um programa para outroassim:

echo "message here"|write $user

ou assim:

cat /tmp/message|write $user

Responder2

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á "enviando um EOF" diretamente aqui, o shell apenas entende a palavra "EOF" como sua marca escolhida para finalizar a entrada e terminará a entrada lá - e write não pede que você pressione ctrl+d neste caso , porque ele está lendo o material que o shell está canalizando para ele.

Nota 2: Você pode achar útil saber que praticamentetodoA ferramenta de linha de comando no mundo Unix permite esse tipo de truques de shell padrão, já que eles dependem apenas do conceito incrivelmente universal de stdin - o write, como muitas outras ferramentas, lerá o que é canalizado para ele - e apenas perguntará ao usuário interativamente para entrada se nada estiver presente e um método de entrada do usuário faria sentido.

Para mais informações, há uma pergunta perguntando exatamente isso aqui:https://stackoverflow.com/questions/2500436/how-does-cat-eof-work-in-bash

informação relacionada