如何透過 shell 腳本向其他使用者發送郵件/寫入?如何發送EOF?

如何透過 shell 腳本向其他使用者發送郵件/寫入?如何發送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”,shell 只是將單字“EOF”理解為您選擇的結束輸入的標記,並將在那裡結束輸入- 在這種情況下write 不會要求您按ctrl+ d ,因為它正在讀取 shell 透過管道傳送給它的內容。

註 2:您可能會發現了解這一點很有用每一個UNIX 世界中的命令列工具允許這種預設的shell 技巧,因為它們僅依賴stdin 的令人難以置信的通用概念- 與許多其他工具一樣,寫入將從管道傳輸到它的內容中讀取-並且只詢問如果不存在這樣的情況,則用戶互動地進行輸入並且用戶輸入方法是有意義的。

欲了解更多信息,這裡有一個問題要求解決這個問題:https://stackoverflow.com/questions/2500436/how-does-cat-eof-work-in-bash

相關內容