Como enviar um mail / write para outro usuário através de um script de shell? Como enviar EOF?

1
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?

    
por Ramana Reddy 20.03.2015 / 10:58

2 respostas

4

Você pode canalizar sua entrada de um programa para outro assim:

echo "message here"|write $user

ou assim:

cat /tmp/message|write $user
    
por madneon 20.03.2015 / 11:12
3

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

    
por anx 20.03.2015 / 12:35