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