Yet events are the primary way anything happens on a computer, whether it’s a user system or a server.
Just in userspace you have;
dmesg -w
tail -f /var/log/messages
There's also dbus to monitor on Linux systems and a lot of kernel hook
tricks you can use to get a message pop up if an event happens.Because it gets annoying to have a process splurge notification stuff to a term you are working in, that's why you have info-bars which many terminal emulators support.
Files are not a good abstraction for events. Signals are broken in many ways. And DBus is both extremely clunky to use and non-portable.
There isn’t a built-in event paradigm similar to how streams and pipes are an integral part of the Unix-style CLI.
Why is that? On the low level everything is a state of electronic cells. Files address those cells in a suitable fashion. Modern programming abstractions such as async/await are very simple, but fail miserably if you need something really complex and efficient.
<https://en.wikipedia.org/wiki/Expect>
Much of modern operating systems is events-based and relies on polling for specific actions, devices connecting / disconnecting, etc. Linux device management is based on this, for example. There are numerous scripts which fire as a service is enabled or disabled (networking "ifup" and "ifdown" scripts, for example), or services are started / stopped. Systemd extends these capabilities markedly.
And of course there's a whole slew of conditional processing, beginning with init scripts, [], test, &&, ||, and specific conditional logic within shells, scripting, and programming languages.