シェル スクリプトを使用して他のユーザーにメールを送信したり書き込んだりするにはどうすればよいでしょうか? 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

関連情報