if [ who | grep $user | grep pts ]
then
write $user
message here
EOF
fi
在這裡,如果我執行它,它會在寫入時阻塞,我必須手動輸入訊息,然後按Ctrl+ d。
有沒有辦法透過程式發送訊息和EOF?
答案1
答案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