A good CLI has to satisfy a number of conditions, IMHO:
* Human-friendly interaction:
-- Command completion
-- Help for all commands
-- Doesn't need a load of APL-like runes in order to achieve anything
-- Intuitively obvious, so far as possible
-- Low bar for entry
* Not too verbose (something that requires the equivalent of COBOL's "ADD A TO B GIVING C" ain't gonna roll, sorry!)
* Sensible and consistent
* Embeds a full programming language - but you don't need that language to run straightforward commands
* Completely embraces parallelism without pain
-- Including being able to spin off and manage daemon processes
-- And having a painless way of managing (plumbing, in other words) inputs and outputs of each stage - {Uni,Linu}x shells haven't really improved the way they do this in over thirty years, and they didn't get it right the first time!
* As much as possible of the operating system's capability should be exposed, to as deep a level as possible, through the CLI
* Not tied to one operating system - inherently capable of being applied to any (or at least any common one)
My preference would be that the CLI presents a genuinely object-oriented representation of data and the programs that know how to interpret the data, plus the operating system services as well.
Microsoft's PowerShell satisfies a lot of these requirements...however, it falls way short of the "Low bar for entry" criterion, as anyone who's tried to learn it casually will have discovered the hard way.
A Pythonic shell could also be made to work (yes, I've tried using Python as a shell. No, it didn't go well), but would require a bit of nurdling to bring it into compliance with most of the requirements above, particularly the human interface ones.
A lot of questions here - a lot fewer answers, but I thought I'd throw out these thoughts for the assembled masses to contemplate, be inspired by, or tear to pieces.