I use the shell every day, and I have mixed feelings.
1. The core concepts are beautiful.
Pipes are elegant. Simple programs that read and write text are one of the most enduring abstractions we've come up with.
I've used a single, surprisingly readable command that:
- dumps a database with mysqldump
- zips it
- sends it over to another server
- unzips it
- loads it into mysql
...in a single streaming operation, without creating any files! Making a lot of disparate programs, written decades apart, work together so seamlessly is simply impossible any other way. The shell is powerful.
2. The implementation is unnecessarily complex and fragmented
The standard commands all have cryptic names like `ls`, `cat`, and so on. They're second nature to us, but we've made the barrier unnecessarily high for new people who are just learning. Man pages suck (bro pages are much nicer). There are a lot of shells (bash, sh, zsh, etc). They're similar but subtly different. Standard commands like `ps` are incompatible between OSX and Linux, or even different flavors of Linux. Simple operations often require cryptic incantations. I type `tar -xzvf` at least once a week. The original Unix ideal is minimalist and beautiful, but the rest of the experience feels like it was crafted by neckbeards without regard for usability or learn-ability.
3. Shell scripts are terrible
A fresh, out of the box Ubuntu installation contains (very roughly) 100k lines of shell script, probably more.
For writing actual programs, `bash` is one of the worst programming languages that exist.
It makes languages like Perl or PHP look sane and principled.
Every time I use a solidly engineered system (say `buck` for building a large Java project) next to an equivalent shell-script-based system (say autogen + configure + make for a typical C++ project), I'm blown away at how much faster, cleaner, and more robust our software could be, and I feel sad that we've built so much on top of Rube Goldberg shell script contraptions.
---
I think there's room for a ground-up Unix, true to original principles. I would love to make a minimalist Linux distro that boots without executing a single line of shell script. Configuration would be via a small set of JSON files, not some Turing-complete hairball language. It would still have a shell, but it would be a minimal, sane shell. You'd be able to type `help` for a complete and concise listing of available commands, each with a one-line example.