if [ who | grep $user | grep pts ]
then
write $user
message here
EOF
fi
Wenn ich es hier ausführe, blockiert es beim Schreiben und ich muss manuell eine Nachricht eingeben und dann Ctrl+ drücken d.
Gibt es eine Möglichkeit, Nachrichten und EOF über das Programm zu senden?
Antwort1
Du kannstLeiten Sie Ihre Eingaben von einem Programm zum anderen weiter.so was:
echo "message here"|write $user
oder so:
cat /tmp/message|write $user
Antwort2
Was Sie wahrscheinlich suchen, ist der folgende Schreibstil (entspricht anderen Methoden):
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
Hinweis: Sie „senden hier nicht direkt ein EOF“, die Shell versteht das Wort „EOF“ lediglich als die von Ihnen gewählte Markierung zum Beenden der Eingabe und beendet die Eingabe dort – und „write“ fordert Sie in diesem Fall nicht auf, Strg+D zu drücken, weil es das Material liest, das die Shell ihm über eine Pipe zuleitet.
Hinweis 2: Es kann hilfreich sein zu wissen, dassjedenBefehlszeilentools in der Unix-Welt ermöglichen diese Art von Standard-Shell-Tricks, da sie nur auf dem unglaublich universellen Konzept von stdin basieren – write liest wie viele andere Tools, was ihm zugeführt wird – und fordert den Benutzer nur dann interaktiv zur Eingabe auf, wenn keine solche vorhanden ist und eine Benutzereingabemethode sinnvoll wäre.
Für weitere Informationen gibt es hier eine Frage, die genau danach fragt:https://stackoverflow.com/questions/2500436/wie-funktioniert-cat-eof-in-bash