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