Как отправить письмо / написать другому пользователю через скрипт оболочки? Как отправить EOF?
if [ who | grep $user | grep pts ]
then
write $user
message here
EOF
fi
Здесь, если я выполню его, он блокируется при записи, и мне нужно ввести сообщение вручную, а затем нажать Ctrl+d.
Есть ли способ отправить сообщение и EOF через программу?
2 ответа
То, что вы, вероятно, ищете, это следующий стиль написания (эквивалентно другим методам)
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
Примечание: здесь вы напрямую не "отправляете EOF", оболочка просто воспринимает слово "EOF" как выбранную вами отметку окончания ввода и заканчивает ввод там - и команда write не просит вас нажать Ctrl+ D в этом случае потому что он читает из того, что оболочка ему подает.
Примечание 2: вам может пригодиться знание того, что практически все инструменты командной строки в мире Unix допускают подобные хитрости оболочки по умолчанию, поскольку они полагаются только на невероятно универсальную концепцию stdin - write, как и многие другие инструменты, читать из того, что ему передано, и только интерактивно запрашивать ввод данных, если их нет, а метод ввода пользователя имеет смысл.
Для получения дополнительной информации, есть вопрос, спрашивающий именно об этом здесь: https://stackoverflow.com/questions/2500436/how-does-cat-eof-work-in-bash
Вы можете передавать свои данные из одной программы в другую следующим образом:
echo "message here"|write $user
или вот так:
cat /tmp/message|write $user