Как отправить письмо/запись другому пользователю через скрипт оболочки? Как отправить EOF?

Как отправить письмо/запись другому пользователю через скрипт оболочки? Как отправить EOF?
if [ who | grep $user | grep pts ]
then
              write $user
                   message here
                   EOF
fi

Если я его выполню, он блокируется при записи, и мне приходится вводить сообщение вручную, а затем нажимать Ctrl+ d.

Есть ли способ отправить сообщение и EOF через программу?

решение1

Ты можешьперенаправьте ваш ввод из одной программы в другуютак:

echo "message here"|write $user

или так:

cat /tmp/message|write $user

решение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

Связанный контент